협력과 메시지
- 객체가 독립적으로 수행할 수 있는 것보다 더 큰 책임을 수행하기 위해서는 다른 객체와 협력해야 한다.
- 두 객체의 협력을 가능하게 해주는 매개체가 바로 메시지이다.
- 메시지와 메서드를 분리하는 것이 커다란 차이를 만든다.
- 메시지 : 호출하는 시점
- 메서드 : 실행되는 시점 (동적으로 바인딩 되기 때문에 다형성이 적용되면서 큰 효과가 있다.)
인터페이스
퍼블릭 인터페이스와 오퍼레이션
- 퍼블릭 인터페이스란 객체가 의사소통을 위해 외부에 공개하는 메시지의 집합을 말한다.
- 오퍼레이션이란 퍼블릭 인터페이스에 포함된 메시지를 말한다. 보통은 추상화된 시그니처를 의미한다.
- 시그니처 구성요소
- 기능 식별 이름
- 파라미터 및 파라미터 타입
- 기능 실행 결과 값
- 메시지 전송 → 오퍼레이션 호출 → 메서드 실행
인터페이스와 설계 품질
- 좋은 인터페이스는 최소한의 인터페이스와 추상적인 인터페이스라는 조건을 만족해야 한다.
- 최소한의 인터페이스는 꼭 필요한 오퍼레이션만을 인터페이스에 포함한다.
- 추상적인 인터페이스는 어떻게 수행되는 지가 아니라 무엇을 하는지를 표현한다.
- 이는
책임 주도 설계
방법으로 달성할 수 있다.
- 책임 주도 설계 방법은 메시지를 먼저 선택함으로써 협력과는 무관한 오퍼레이션을 배제하고 최소의 오퍼레이션만 포함한다. 또한 메시지가 객체를 선택하게 함으로써 클라이언트의 의도를 메시지에 표현할 수 있게 한다.
의도를 드러내는 인터페이스
- 메서드 이름을 짓는 방법은
어떻게
가 아니라 무엇
을 하는지를 드러내는 것이다.
- 이를 위해서는 외부의 객체가 메시지를 전송하는 목적을 먼저 생각해야 하고, 그 목적은 객체의
책임
이 되어야 한다.
- 결과적으로 구현과 관련된 모든 정보를 캡슐화하고, 객체의 퍼블릭 인터페이스에는 협력과 관련된 의도만을 표현해야 한다.
결론
객체는 서로 메시지를 주고 받으며 협력 관계를 맺는다. 메시지와 메서드를 구분하는 것은 다형성의 강력함을 이해할 수 있는 시작이라고 할 수 있다.
메시지는 퍼블릭 인터페이스를 통해 다른 객체에게 알려진다. 좋은 인터페이스는 책임 주도 설계 방법을 통해 최소한의 인터페이스와 추상적인 인터페이스 조건을 만족시켜야 하며 메시지를 호출하는 클라이언트의 목적이 잘 드러나야 한다.
캡슐화
와 의도를 드러내는 인터페이스
를 통해 결합도가 낮으면서도 의도를 명확히 드러내는 간결한 협력 구조를 설계할 수 있게 된다.
참고자료