Skip to content

6. 메시지와 인터페이스 #21

@youngvly

Description

@youngvly

용어정리

  • 메시지 : 객체가 다른 객체와 협력하기 위해 사용하는 의사소통 메커니즘. 전송자 수신자 모두를 포함하는 개념이다.
  • 오퍼레이션 : 객체가 다른 객체에게 제공하는 추상적인 서비스. 오퍼레이션은 수신하는 객체의 인터페이스를 강조한다.
  • 메서드 : 메시지에 응답하기 위해 실행되는 코드 블록. 오퍼레이션의 구현.
  • 퍼블릭 인터페이스 : 외부에서 수신할 수 있는 메시지의 묶음.
    • 객체를 설계할때 가장 중요한것은 퍼블릭 인터페이스를 설계하는 것이다.
  • 시그니처 : 오퍼레이션이나 메서드의 명세, 이름과 인자목록, 반환타입(optional)을 포함한다.

인터페이스 설계와 품질.

디미터 법칙

: 캡슐화, 오직 하나의 도트만 사용하라. (getter)

  • java의 stream 처럼 도트가 여러개이지만 내부구조가 외부로 노출되는게 아니라면 디미터법칙을 준수한 것이다.
  • 객체는 내부구조를 숨겨야하므로 디미터법칙을 따르는 것이 좋지만, 자료구조라면 당연히 내부를 노출해야하므로 적용할 필요가 없다.

묻지말고 시켜라

  • 메시지를 먼저 선택하면, 묻지말고 시켜라 스타일에 따라 협력을 구조화하게 된다.

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

: '어떻게'가 아니라 '무엇을' 하는지 드러내야한다.

명령-쿼리 분리

  • routine : 어떤 절차를 묶어서 호출가능하도록 이름을 부여한 기능 모듈
    • procedure (명령) : 부수효과를 발생시킬 수 있지만, 값을 반환할 수 없다.
    • function (쿼리) : 값을 반환할 수 있지만, 부수효과를 발생시킬 수 없다.
  • 어떤 오퍼레이션도 명령인 동시에 쿼리여서는 안된다.

원칙의 함정

  • 설계는 트레이드오프의 산물이다. 설계를 적절하게 트레이드오프 할 수 있는 능력이 초보자와 숙련자를 구분하는 가장 중요한 기준이라고 할 수 있다.
  • 원칙을 맹신하지 마라.
  • 명령형 프로그래밍 : 부수효과를 기반으로함.
  • 함수형 프로그래밍 : 부수효과가없음.
    • 참조 투명성 : 어떤 표현식 e가 있을때, e의 값(f(e))으로 e가 나타나는 모든 위치를 교체하더라도 결과가 달라지지않는 특성.

책임에 초점을 맞춰라.

  • 메시지를 먼저 선택하고 처리할 객체를 나중에 선택하라.
    • '협력' 안에서, 두 객체사이의 구조적인 결합도를 낮출 수 있다. (디미터 법칙)
    • 묻지말고 시켜라 스타일에 따라 협력을 구조화하게 된다.
    • 메시지를 먼저 선택한다는 것은 메시지를 전송하는 클라이언트 관점에서 메시지 이름을 정한다는 것이다. (의도를 드러내는 인터페이스)
    • 예측가능한 협력을 만들기 위해 명령과 쿼리를 분리하게 될 것이다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions