본문 바로가기
IT 공부/객체지향 설계 공부

객체지향 언어로 절차적 프로그래밍을 하는 문제

by exdus3156 2023. 12. 7.

일반적으로 절차적 프로그래밍은 데이터와 그 데이터를 처리하는 함수를 분리시킨다. 따라서 데이터가 변경되는 경우 필연적으로 함수도 변경해야 한다. 그리고 함수를 변경하면 다시 그 함수를 사용하는 모듈도 변경되어야 한다.. 이렇게 데이터의 수정으로 인해 변경이 위로 파급된다.

자바와 같은 객체지향 언어를 사용한다는 이유로 객체지향 설계가 완성되는 것은 아니다. 어쩌면 절차적 프로그래밍 언어보다 더 이상한 코드가 만들어질 수도 있다.

특히 데이터의 구현을 중심으로 놓고 보는 관점은 아무리 OOP 언어를 사용한다고 해도 잘못된 설계를 낳을 수 있다. 클래스를 만들어 데이터와 메소드를 private 접근 제어자로 숨긴다고 해도 getter, setter, 간단한 데이터 조작 연산의 남발은 이를 무색하게 만든다.

private으로 묶었다는 이유로 정보 은닉이 자동 달성되는 것은 아니다. getter, setter, 그리고 간단한 데이터 조작 연산을 외부에 제공한다는 시점에서 이미 데이터와 그 데이터를 통해 기능을 수행하는 로직이 완전히 서로 다른 객체가 담당하고 있다는 것을 알려주기 때문이다. 이것이 OOP 언어로 절차적 프로그래밍을 하는 대표적인 예시다.

애초에 객체가 인터페이스를 통해 기능만을 외부로 제공한다면 굳이 setter, getter가 필요 없었을 것이다. 객체를 가지고 데이터를 주고 받는 동작이 필요한 경우는 따로 있다. VO나 DTO 같은 것이 그렇다. 이런 객체들은 데이터를 묶어주는 것이 목적이다.

그러나 이러한 특별한 경우가 아니라면 객체를 설계할 때 getter, setter, 조작 연산 등을 구현하고 싶은 압박을 느낀다면 그건 무언가 잘못된 것이다. 위험 신호를 감지해야 한다.