오브젝트 - 4장 설계 품질과 트레이드오프

Seyeon_CHOI·2022년 11월 3일
0
post-thumbnail

해당 챕터는 책임 주도 설계가 아닌 데이터 주도 설계를 했을 때의 부작용을 이야기하고 있다.

객체지향 설계란?

올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집고를 가진 구조를 창조하는 활동


훌륭한 설계란?

합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것

객체지향 설계의 핵심은 책임에 초점에 맞추는 것이다.

그러면, 데이터를 중심으로 한 설계와 차이가 무엇일까?

데이터 중심의 시스템

데이터

객체가 내부에 저장해야하는 '데이터가 무엇인가'를 묻는 것으로 시작

객체가 포함해야 하는 데이터에 집중한다.

객체의 종류를 저장하는 인스턴스 변수와 인스턴스의 종류에 따라 베타적으로 사용될 인스턴스 변수를 하나의 클래스 안에 함께 포함시키는 방식은 데이터 중심 설계 안에서 흔히 있는 패턴이다.

캡슐화를 위해 내부의 데이터를 반환하는 접근자데이터를 변경하는 수정자 추가한다.

설계 트레이드 오프

캡슐화

일단 캡슐화는 객체의 내부 구현을 외부로부터 감추기 위해서 진해
변경될 가능성이 높은 부분을 구현, 상대적으로 안정적인 부분은 인터페이스라고 부른다.

객체를 설계하기 위한 가장 기본적인 아이디러는 변경의 정도에 따라 구현과 인터페이스를 분리하고 외부에서는 인터페이스에만 의존하도록 관계를 조절하는 것

응집도와 결합도

응집도는 모듈에 포함된 내부 요소들이 연관돼 있는 정도를 나타냄
결합도는 의존서의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도

애플리케이션을 구성하는 각 요소의 응집도가 높고 서로 느슨하게 결합돼 있다면 그 애플리케이션은 좋은 설계를 가졌다고 볼 수 있다.

변경의 관점
응집도 -> 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도
하나의 변경을 위해 하나의 모듈만 변경 및 그 해당 모듈이 전체 변경된다면 응집도가 높다.

결합도 -> 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하는 정도
변경해야하는 모듈 수 증가 -> 결합도 증가

데이터 중심 설계의 문제점

  • 캡슐화 위반
  • 높은 결합도
  • 낮은 응집도

해결을 위해
캡슐화를 지키고
스스로 자신의 데이터를 책임지는 객체로 묶는다.

하지만, 그래도 여전히 부족하다.

내부의 구현의 변경이 외부로 퍼져나가는 파급 효과는 캡슐화가 부족하는 증거이며, 내부 구현이 외부로 노출됐기 때문에 결합도는 높고 결국에는 응집도까지 낮아지게 된다.

객체의 행동보다는 상태에 초점을 맞추기 때문에 설계를 시작하는 처음부터 데이터에 관해 결정하도록 강요한다.

또한, 객체를 고립시킨 채 오퍼레이션을 정의하도록 만든다.

올바른 객체지향 설계의 무게 중심은 항상 객체의 내부가 아니라 외부에 맞춰져 있어야 한다. 하지만, 데이터 중심 설계는 내부에 맞춰져있다.

profile
오물쪼물 코딩생활 ๑•‿•๑

0개의 댓글