본문 바로가기

관심사/독후감

<조영호> 오브젝트

05. 책임 할당하기 

1. 클래스가 여러 이유로 변경돼야 한다면 응집도가 낮은 것이다. 변경의 이유를 기준으로 클래스를 분리해야한다.

2. 응집도가 높은 클래스는 인스턴스를 생성할 때 모든 속성을 함께 초기화한다. 반면 응집도가 낮은 클래스는 객체의 속성 중 일부만 초기화하고, 일부는 초기화되지 않은 상태로 남겨진다. 때문에 함께 초기화되는 속성들을 기준으로 클래스를 분리해야한다. 

3. 모든 메서드가 객체의 모든 속성을 사용한다면 클래스의 응집도가 높다고 볼 수 있다. 반면 메서드들이 사용하는 속성에 따라 그룹이 나뉜다면 클래서의 응집도가 낮다고 볼 수 있다. 

 

06. 메시지와 인터페이스

디미터 법칙

클래스 내부의 메서드는 아래 조건을 만족하는 인스턴스에게만 메시지를 전송해야한다.

-> this 객체 / 메서드의 매개변수 / this의 속성 / 메서드 내에서 생성된 지역 객체

메서드 체인으로 연관 객체를 호출하면, 코드의 의존성이 높아지게 된다. 

의도를 드러내는 인터페이스

메서드 이름은 "어떻게"가 아니라 "무엇을"하는지 드러내야한다. 그래야 메서드의 의도에 집중할 수 있고, 캡슐화를 가능하게 한다. 

Command And Query 분리 원칙

Command (명령)은 프로시저를 의미한다. Command에 해당하는 메서드는 객체의 상태를 변경하고, 값을 반환하지 않는다.

Query는 함수를 의미한다. Query는 메서드의 객체 상태를 변경하지 않고, 값을 반환한다. Query는 필요한 데이터를 새로 만들어서 리턴한다. 

두 원칙이 섞이면 안된다. 객체의 상태를 변경하면서 값을 반환하면 안된다.

원칙의 함정

설계를 적절하게 트레이드오프 할 수 있는 능력이 초보자와 능숙자를 구분하는 중요한 기준이다. 초보자는 원칙을 맹목적으로 추종한다. 심지어 원칙이 서로 충돌하는 경우에도 정당성을 부여하며 억지로 끼워맞춘다. 결과적으로 코드는 일관성을 잃어버리고, 코드는 무질서에 빠지게 된다. 때문에 상황에 부적합하다 판단되면, 과감히 원칙을 무시해야한다. 원칙을 아는 것보다 더 중요한 것은 언제 원칙이 유용하고, 유용하지 않은지 판단하는 능력이다.