협력과 메시지
객체의 역할을 확장하여 더 큰 책임을 수행할 수 있게 하는 방법은 다른 객체와 협력해야 한다는 것이다. 한 가지 객체에는 한 가지 역할, 한 가지 책임만을 부여하고 다른 객체에게 메시지를 전송함으로서 협력 관계가 형성된다.
메시지 호출과 메서드 호출?
메시지를 수신했을 때 어떤 코드가 실행되는지는 메시지 수신자의 실제 타입이 무엇인가에 달려있다. 즉, 메시지 수신자가 인터페이스 타입으로 정의되어있는 경우 실제로 실행되는 코드는 인터페이스를 구현받은 클래스의 종류에 따라 달라진다.
메서드는 메시지를 수신했을 때 실제로 실행되는 함수이다. 동일한 메시지를 전송하더라도, 객체의 타입에 따라 실행되는 메서드가 달라질 수 있다. 즉 메시지가 전송되는 시점에서는 어떤 코드가 실행될 것인지는 정확히 알 수 없다. 알 필요도 없음.... 메시지 전송자는 어떤 메시지를 전송해야 하는지에 대해서만, 즉 책임에 대해서만 알고 있으면 된다.
메시지는 인터페이스, 메서드는 구현
인터페이스와 설계 품질
좋은 인터페이스는 최소한의 인터페이스와 추상적인 인터페이스
인터페이스의 품질에 영향을 미치는 원칙
- 디미터 법칙 : 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한하라
- 객체의 내부 구조를 묻는 메시지가 아니라 수신자에게 시키는 메시지가 더 좋은 메시지
- 묻지 말고 시켜라
- 객체지향의 기본 : 함께 변경될 확률이 높은 정보와 행동을 하나의 단위로 통합하는 것
- 의도를 드러내는 인터페이스
- 켄트백이 설명한 메서드를 명명하는 두 가지 방법
- 메서드가 작업을 어떻게 수행하는지른 나타내도록 이름 짓는 것
- 어떻게가 아니라 무엇을 하는지를 드러내는 것
- 켄트백이 설명한 메서드를 명명하는 두 가지 방법
명령-쿼리 분리 원칙
- 명령과 쿼리를 분리
- 객체의 상태를 변경하는 명령은 반환값을 가질 수 없음
- 객체의 정보를 반환하는 쿼리는 상태를 변경할 수 없음
논의
- 디미터법칙을지키기 위해서는 ... 응집도
- 시켜라...물어보지말고....
- 위임하는 과정에서 결합도가 높아지지않나...
- 씨어터에서 판매 역할을 수행할 때 - 어디언스... 티켓셀러 연관관계를 맺어야하는데 이런식으로 기능이 늘어가면 결합도가 높아질것같음
- 어디언스 - bag
- 이런 연관관계 설정하는게 중요할거같음...
- 아래조건을 만족하는 인스턴스에게만 메시지 전송
- this 객체.....매개변수
- screening.getMovie(); <- 내부 속성이 뭐있는지..캡슐화x
- immutable 불변성 side effect 발생 x
- deepcopy -> 객체를 새로 만들어서 반환
- idempotent
- 똑같은 입력에 대해서 출력값이
- POST 멱등성 보장 X
- PUT 멱등성 보장 O
- 데이터를 물어볼 때는.......
- 수신하는 객체 입장이 아니라 클라이언트 중심으로 메서드명을 만들자
- getSequence() -> 메시지인지?
'기술 서적 정리 > 오브젝트' 카테고리의 다른 글
8장 의존성 관리하기 (0) | 2023.04.24 |
---|---|
7장 객체분해 (0) | 2023.04.09 |
오브젝트 스터디 2회, 3회 회고 (0) | 2023.03.29 |
5장 책임 할당하기 (0) | 2023.03.26 |
오브젝트 스터디 1회 회고 (0) | 2023.03.18 |
댓글