본문 바로가기

책/Object

설계 품질과 트레이드오프

설계 트레이드오프

캡슐화

 - 외부에서 알 필요가 없는 부분을 감춤으로써 대상을 단순화하는 추상화의 한 종류

 - 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서이다.

구현 : 변경될 가능성이 높은 부분

인터페이스 : 상대적으로 안정적인 부분

설계가 필요한 이유는 요구사항이 변경되기 때문이고, 캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문이다.

응집도

 - 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냄

 - 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도

결합도

 - 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도

 - 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하는 정도


캡슐화의 진정한 의미

단순히 객체 내부의 데이터를 외부로부터 감추는 것 이상의 의미를 가짐

 - 변경될 수 어떤 것이라도 감추는 것을 의미

내부 구현의 변경으로 인해 외부의 객체가 영향을 받는다면 캡슐화를 위반한 것


데이터 중심 설계의 문제점

1. 객체의 행동보다는 상태에 초점을 맞춤

 - 데이터 중심 설계의 관점에서 객체는 그저 단순한 데이터의 집합체. 

 - 이로 인해 접근자와 수정자를 과도하게 추가하게 되고 이 데이터 객체를 사용하는 절차를 분리된 별도의 객체 안에 구현하게 된다. (절차지향 프로그래밍)

 - 너무 이른 시기에 데이터에 대해 고민하기 때문에 캡슐화에 실패

 - 객체의 내부 구현이 객체의 인터페이스를 어지럽히고 객체의 응집도와 결합도에 나쁜 영향을 미치기 때문에 변경에 취약한 코드를 낳게 된다.

2. 객체를 고립시킨 채 오퍼레이션을 정의하도록 만듦

 - 데이터 중심 설계에서 초점은 객체의 외부가 아니라 내부로 향함

 - 실행 문맥에 대한 깊이 있는 고민 없이 객체가 관리할 데이터의 세부 정보를 먼저 결정

 - 객체의 구현이 이미 결정된 상태에서 다른 객체와의 협력 방법을 고민하기 때문에 이미 구현된 객체의 인터페이스를 억지로 끼워 맞출 수 밖에 없다

 - 객체의 인터페이스에 구현이 노출 되므로 협력이 구현 세부사항이 종속되어 있고 그에 따라 내부 구현이 변경됐을 때 협력하는 객체 모두가 영향을 받음


' > Object' 카테고리의 다른 글

메시지와 인터페이스  (0) 2020.06.29
책임 할당하기  (0) 2020.06.23
역할, 책임, 협력  (0) 2020.06.22
객체지향 프로그래밍  (0) 2020.06.02
객체, 설계  (0) 2020.06.01