-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
Description
용어정리
- 메시지 : 객체가 다른 객체와 협력하기 위해 사용하는 의사소통 메커니즘. 전송자 수신자 모두를 포함하는 개념이다.
- 오퍼레이션 : 객체가 다른 객체에게 제공하는 추상적인 서비스. 오퍼레이션은 수신하는 객체의 인터페이스를 강조한다.
- 메서드 : 메시지에 응답하기 위해 실행되는 코드 블록. 오퍼레이션의 구현.
- 퍼블릭 인터페이스 : 외부에서 수신할 수 있는 메시지의 묶음.
- 객체를 설계할때 가장 중요한것은 퍼블릭 인터페이스를 설계하는 것이다.
- 시그니처 : 오퍼레이션이나 메서드의 명세, 이름과 인자목록, 반환타입(optional)을 포함한다.
인터페이스 설계와 품질.
디미터 법칙
: 캡슐화, 오직 하나의 도트만 사용하라. (getter)
- java의
stream처럼 도트가 여러개이지만 내부구조가 외부로 노출되는게 아니라면 디미터법칙을 준수한 것이다. - 객체는 내부구조를 숨겨야하므로 디미터법칙을 따르는 것이 좋지만, 자료구조라면 당연히 내부를 노출해야하므로 적용할 필요가 없다.
묻지말고 시켜라
- 메시지를 먼저 선택하면, 묻지말고 시켜라 스타일에 따라 협력을 구조화하게 된다.
의도를 드러내는 인터페이스
: '어떻게'가 아니라 '무엇을' 하는지 드러내야한다.
명령-쿼리 분리
- routine : 어떤 절차를 묶어서 호출가능하도록 이름을 부여한 기능 모듈
- procedure (명령) : 부수효과를 발생시킬 수 있지만, 값을 반환할 수 없다.
- function (쿼리) : 값을 반환할 수 있지만, 부수효과를 발생시킬 수 없다.
- 어떤 오퍼레이션도 명령인 동시에 쿼리여서는 안된다.
원칙의 함정
- 설계는 트레이드오프의 산물이다. 설계를 적절하게 트레이드오프 할 수 있는 능력이 초보자와 숙련자를 구분하는 가장 중요한 기준이라고 할 수 있다.
- 원칙을 맹신하지 마라.
- 명령형 프로그래밍 : 부수효과를 기반으로함.
- 함수형 프로그래밍 : 부수효과가없음.
- 참조 투명성 : 어떤 표현식 e가 있을때, e의 값(f(e))으로 e가 나타나는 모든 위치를 교체하더라도 결과가 달라지지않는 특성.
책임에 초점을 맞춰라.
- 메시지를 먼저 선택하고 처리할 객체를 나중에 선택하라.
- '협력' 안에서, 두 객체사이의 구조적인 결합도를 낮출 수 있다. (디미터 법칙)
- 묻지말고 시켜라 스타일에 따라 협력을 구조화하게 된다.
- 메시지를 먼저 선택한다는 것은 메시지를 전송하는 클라이언트 관점에서 메시지 이름을 정한다는 것이다. (의도를 드러내는 인터페이스)
- 예측가능한 협력을 만들기 위해 명령과 쿼리를 분리하게 될 것이다.
Reactions are currently unavailable