캡슐화를 위반한 설계를 구성하는 요소들이 높은 응집도와 낮은 결합도를 가질 확률은 극히 낮다. 따라서 캡슐화를 위반한 설계는 변경에 취약할 수밖에 없다.
데이터 중심 설계가 변경에 취약한 이유는 두 가지다.
- 너무 이른 시기에 데이터에 관해 결정하도록 강요한다.
- 협력이라는 문맥을 고려하지 않고 객체를 고립시킨 채 오퍼레이션을 결정한다.
데이터 중심 설계는 객체의 행동보다 상태에 초점을 맞춘다
데이터 중심 설계를 시작할 때 던지는 첫 번째 질문은 "이 객체가 포함해야 하는 데이터가 무엇인가?"이다. 데이터는 구현의 일부다. 데이터 주도 설계에서는 설계를 시작하는 처음부터 데이터를 결정하도록 강요하기 때문에 너무 이른 시기에 내부 구현에 초점을 맞추게 된다.
데이터 중심 설계에 익숙한 개발자는 일반적으로 데이터와 기능을 분리하는 절차적 프로그래밍 방식을 따른다. 이것은 상태와 행동을 하나의 단위로 캡슐화하는 객체지향 패러다임에 반하는 것이다. 데이터 중심 관점에서 객체는 그저 단순한 데이터의 집합일 뿐이다. 이로 인해 접근자와 수정자를 과도하게 추가하게 되고 이 데이터 객체를 사용하는 절차를 다른 객체 안에 구현하게 된다.
이 문제점을 개선하기 위해 데이터를 처리하는 작업과 데이터를 같은 객체 안에 두더라도 초점이 '데이터'에 있다면 만족스러운 캡슐화를 얻기 어렵다. 데이터를 먼저 결정하고, 데이터를 처리하는 데 필요한 오퍼레이션을 나중에 결정하는 방식은 데이터에 관한 지식이 객체의 인터페이스에 고스란히 드러난다. 결과적으로 객체의 인터페이스는 구현을 캡슐화하는 데 실패하고 코드는 변경에 취약해진다.
정리하자면 데이터 중심 설계의 문제점은 너무 이른 시기에 데이터에 대해 고민하기 때문에 캡슐화에 실패한다는 데 있다. 객체 내부 구현이 객체 인터페이스를 어지럽히고 응집도와 결합도에 나쁜 영향을 미친다.
'Study > 오브젝트' 카테고리의 다른 글
[오브젝트06] 메시지와 인터페이스 (0) | 2022.11.30 |
---|---|
왜 캡슐화를 지켜야 하는가? (0) | 2021.11.07 |
[오브젝트03] 역할, 책임, 협력 (0) | 2021.04.07 |
[오브젝트02] 객체지향 프로그래밍 (0) | 2021.04.01 |
[오브젝트01] 객체, 설계 (0) | 2021.03.30 |