※ 이글은 독자를 전혀 배려하지 않고 그냥 제가 정리하고 싶은 내용 정리하는 글입니다.
169p~181p
일반적으로 명확성의 가치가 클래스의 길이보다 더 중요하다.
객체를 자율적으로 만들자
- 자율적인 객체가 될 수 있가 메서드를 적절한 클래스로 이동시키자. 자신이 소유하고 있는 데이터를 스스로 처리하게 만드는 것이 자율적인 객체를 만드는 지름길이다.
- 데이터를 사용하는 메서드를 데이터를 가진 클래스로 이동시키고 나면 캡슐화와 높은 응집도, 낮은 결합도를 가지는 설계를 얻게 된다.
챕터6. 메시지와 인터페이스
객체지향 프로그래밍에 대한 가장 흔한 오해는 애플리케이션이 클래스의 집합으로 구성된다는 것이다.
애플리케이션은 객체들 사이의 메시지를 통해 정의된다.
1) 협력과 메시지
클라이언트-서버 모델
- 협력은 객체가 다른 객체에게 무언가를 요청할 떄 시작된다.
- 이러한 상황에서 전통적인 메타포는 클라이언트-서버 모델
- 전송 객체: 클라이언트, 수신 객체 : 서버
메시지와 메시지 전송
메시지: 객체들이 협력하기 위해 사용할 수 있는 '유일한' 의사소통 수단
- 메시지는 오퍼레이션명과 인자로 구성되며, 메시지 전송은 여기에 메시지 수신자를 추가한 것
메시지와 메서드
-메서드: 메시지를 수신했을 때 실제로 실행되는 함수 또는 프로시저
- 동일한 메시지를 전송하더라도 객체의 타입에 따라 실행되는 메서드가 달라질 수 있다.
- 객체는 메시지가 실행할 코드가 런타임 시점에 달라질 수 있음
- 이러한 메커니즘은 두 객체 사이의 결합도를 낮춤으로써 유연하고 확장 가능한 코드를 작성할 수 있게 해준다.
퍼블릭 인터페이스와 오퍼레이션
- 외부의 객체는 오직 객체가 공개하는 메시지를 통해서만 객체와 상호작용할 수 있다.
- 퍼블릭 인터페이스: 객체가 의사소통을 위해 외부에 공개하는 메시지들의 집합
- 오퍼레이션: 퍼블릭 인터페이스에 포함된 메시지, 구현 코드를 제외하고 메시지와 관련된 시그니처
- 오퍼레이션(UML에서의 정의): 실행하기 위해 객체가 호출될 수 있는 변환이나 정의에 관한 명세
- 인터페이스의 각 요소는 오퍼레이션, 오퍼레이션은 구현이 아닌 추상화. 메서드는 오퍼레이션을 구현한 것
시그니처
- 오퍼레이션의 이름과 파라미터 목록을 합친 것
- 오퍼레이션이나 메서드의 명세를 나타낸 것
- 반환 타입을 시그니처의 일부로 포함하는 언어도 존재한다.