기술 서적 정리/오브젝트

6장 메시지와 인터페이스

wampy 2023. 4. 3.

협력과 메시지

객체의 역할을 확장하여 더 큰 책임을 수행할 수 있게 하는 방법은 다른 객체와 협력해야 한다는 것이다. 한 가지 객체에는 한 가지 역할, 한 가지 책임만을 부여하고 다른 객체에게 메시지를 전송함으로서 협력 관계가 형성된다.

메시지 호출과 메서드 호출?

메시지를 수신했을 때 어떤 코드가 실행되는지는 메시지 수신자의 실제 타입이 무엇인가에 달려있다. 즉, 메시지 수신자가 인터페이스 타입으로 정의되어있는 경우 실제로 실행되는 코드는 인터페이스를 구현받은 클래스의 종류에 따라 달라진다.

메서드는 메시지를 수신했을 때 실제로 실행되는 함수이다. 동일한 메시지를 전송하더라도, 객체의 타입에 따라 실행되는 메서드가 달라질 수 있다. 즉 메시지가 전송되는 시점에서는 어떤 코드가 실행될 것인지는 정확히 알 수 없다. 알 필요도 없음.... 메시지 전송자어떤 메시지를 전송해야 하는지에 대해서만, 즉 책임에 대해서만 알고 있으면 된다.

메시지는 인터페이스, 메서드는 구현

인터페이스와 설계 품질

좋은 인터페이스는 최소한의 인터페이스와 추상적인 인터페이스

인터페이스의 품질에 영향을 미치는 원칙

  • 디미터 법칙 : 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한하라
    • 객체의 내부 구조를 묻는 메시지가 아니라 수신자에게 시키는 메시지가 더 좋은 메시지
  • 묻지 말고 시켜라
    • 객체지향의 기본 : 함께 변경될 확률이 높은 정보와 행동을 하나의 단위로 통합하는 것
  • 의도를 드러내는 인터페이스
    • 켄트백이 설명한 메서드를 명명하는 두 가지 방법
      1. 메서드가 작업을 어떻게 수행하는지른 나타내도록 이름 짓는 것
      2. 어떻게가 아니라 무엇을 하는지를 드러내는 것

명령-쿼리 분리 원칙

  • 명령과 쿼리를 분리
    • 객체의 상태를 변경하는 명령은 반환값을 가질 수 없음
    • 객체의 정보를 반환하는 쿼리는 상태를 변경할 수 없음

논의

  • 디미터법칙을지키기 위해서는 ... 응집도
    • 시켜라...물어보지말고....
    • 위임하는 과정에서 결합도가 높아지지않나...
    • 씨어터에서 판매 역할을 수행할 때 - 어디언스... 티켓셀러 연관관계를 맺어야하는데 이런식으로 기능이 늘어가면 결합도가 높아질것같음
    • 어디언스 - 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

댓글