728x90
메시지와 메서드

- 메시지는 한 객체가 다른 객체와 의사소통할 수 있는 유일한 방법이다.
- 객체가 다른 객체에게 협력을 요청하기 위해서는 메시지를 전송해야 한다.
- 메서드는 메시지를 수신한 객체가 메시지를 처리하기 위해 수행하는 행동을 의미한다.
- 동일한 메시지를 전송하더라도 메시지를 수신한 객체는 자신의 타입에 맞는 적절한 메서드를 선택한 후 실행할 수 있다.
- 메시지를 수신할 수 있는 어떤 객체라도 협력에 참여할 수 있다. 즉, 메시지는 협력 대상을 플러그인 할 수 있는 슬롯 역할이 되는 것이다.
메시지와 메서드를 분리하는 이유는? 의존성을 제어해서 내부의 데이터가 변경되거나 타입이 바뀔 때의 파급 효과를 제어하기 위해서이다. 즉 쉽게 수정할 수 있는 코드를 작성하기 위해서이다. 변경하기 쉬운 구조를 설계하기 위해서는 메시지를 먼저 결저하고 메시지를 수신할 객체를 나중에 선택해야 한다.
메시지에 맞춰 인터페이스 선언

- 자바와 같은 강타입 언어에서는 메시지만 단독으로 사용할 수 없고 메시지를 포함한 명확한 타입을 정의해야한다.
- 인터페이스는 다른 객체가 플러그인 될 수 있는 일종의 슬롯을 제공한다.
- 해당 객체를 구현한 객체는 협력에 참여할 수 있다.
- 새로운 협력이 추가되더라도 DiscountPolicy 코드는 수정할 필요가 없는데, 그 이유는 DiscountPolicy가 DiscountCondition 인터페이스(메시지)에만 의존하기 때문이다.
메시지를 기반으로 협력을 설계하면 새로운 타입을 추가하더라도 기존 코드를 수정할 필요가 없다. 따라서 메시지를 기반으로 협력할 객체를 교체할 수 있는 유연할 설계를 얻을 수 있게 된다.
동적 바인딩

- 객체지향에서는 실행될 메서드가 런타임에 결정된다
- 요청을 수신한 객체는 타입에 따라 적절한 메서드를 실행하게 된다.
- 런타임의 객체가 처리하기에 적절한 클래스와 메서드를 결정하는 방식을 동적 바인딩이라고 한다.
- 동적 바인딩을 지원하기 위해 객체는 메시지를 처리하기 위해 필요한 클래스와 메서드를 탐색하기 위한 경로를 설정해야 한다.
- 객체는 자기 자신을 스스로 책임져야 하기 때문에 메시지를 수신했을 때 자기 자신이 어떤 일을 해야 하는지 스스로 결정해야 한다.
728x90
'오브젝트' 카테고리의 다른 글
| Ch05. 객체지향 구현 - 애플리케이션 객체 추가하기 (0) | 2024.10.09 |
|---|---|
| Ch05 객체지향 구현 - 유연하고 일관적인 협력 (0) | 2024.10.09 |
| Ch05 객체지향 구현 - 객체 구현하기 (0) | 2024.10.09 |
| Ch04 책임 할당하기 - 변경 보호 (8) | 2024.10.05 |
| Ch04. 책임 할당하기 - 다형성 (0) | 2024.10.05 |