
객제치향 공동체를 구성하는 단위는
자율적인객체
즉, 객체가 맡은 책임을 어떻게 수행하는지는 객체스스로, 자율적으로 판단해서 행동
협력관계 내에서 객체는 요청을 받아서 어떤 행동을 수행
→ 이 수행을 책임이라고 함
A 객체와 B 객체가 협력관계 내에 있다고 가정
→ 이때, A객체가 B 객체에게 특수한 요청을 함
→ B 객체는 이 요청을 수행하기만 하면 됨, 어떻게 수행할지는 전적으로 B의 자율에 맡김
재판장이 모자장수에게 증언을 요청
자율적으로 알아서 증언하면 됨어떻게 수행할지를 제한하고 있으므로 원활한 수행이 이루어지지 않을 수도 있음너무 모호(추상적)추상적이고 포괄적인 책임은 협력관계에서 해당 책임을 재사용할 수 있도록 해줌
→ 자율성을 보장할 수 있도록 추상적이되, 협력의 의도를 파악할 수 있을 정도로 뚜렷해야 함
자율적인 책임의 특징은 협력을 위해 어떻게가 아니라 무엇을 해야 하는지가 핵심
어떤 객체가 다른 객체에게 요청을 하기 위해 전송하는 것
메시지의 구성
→ 메시지 이름(함수명)과 인자(전달 값) 으로 구성
→ 증언하라(어제, 왕국)
메시지 전송의 구성
→ 수신자와 메시지의 조합
→ 모자장수.증언하라(어제, 왕국)
모자 장수는 증언하라는 메시지를 전달받았을 때, 처리 방법을 자유롭게 선택할 수 있음
→ 모자 장수가 메시지 자체를 변경하지만 않는다면, 책임을 수행하는 방법을 바꿔도 재판장은 이를 알 수 없음
→ 객체의 외부와 내부가 분리되어 있다는 것
메시지를 처리하기 위해 내부적으로 선택하는 방법
서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것
서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 처리
다형성을 만족시킨다는 것
→ 객체들이 동일한 책임을 공유한다는 것
→ 메시지 송신자의 입장에서는 다형적인 수신자들을 구별할 필요가 없고, 송신자의 요청만 수행하면 됨
→ 대체 가능성을 의미
다형성이 설계를 유연하고 재사용 가능하게 만듬
→ 다형성이 수신자의 종류를 캡슐화
송신자와 수신자 간의 결합도를 메시지에 대한 결합도로 낮춤
송신자가 수신자에 대해 매우 조금만 알아도 협력이 가능
책임을 수행하는 자율적인 객체들의 협력을 통해 어플리케이션을 구축하는 것메시지의 전송책임을 완수하기 위해 협력하는 객체들을 이용해 시스템을 설계하는 방법
애플리케이션이 수행하는 기능을 시스템의 책임으로 보는 것에서 시작책임-주도 설계를 위해,
어떤 행위가 필요한지를 먼저 결정한 후에 객체를 결정하는 사이클
- 협력이라는 맥락에서, 객체부터 정하는 것이 아닌, 메시지부터 먼저 결정하는 것
→ 이렇게 메시지들이 모여,책임을 구성함
책임-주도 설계는 객체가 아닌 객체들이 주고받는 메시지에 집중하여 객체지향의 장점을 극대화
→ 메시지에 집중하게 되면, 메시지 수신자의 캡슐화를 증진시킴
→ 그 결과, 더 유연하고 재사용 가능한 설계할 수 있음 & 결합도가 낮아짐
‘어떻게’보다 ‘무엇을’에 집중하기
→ 객체의 인터페이스의 크기를 급격하게 줄일 수 있음
→ 외부에서 이 객체에 의존하게 되는 영역이 더 줄어듬
→ 협력관계의 송/수신자 사이의 결합도가 줄어듬
두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있도록 이어주는 방법이나 장치
책임의 수행이 자율적이어야 함
→ 자율적이라 함은, 수행만 한다면, 수행 방법은 어떻게 하든 상관 없음
한 객체가 다른 객체에게 요청을 할 때 사용하는 메시지
→ 객체의 인터페이스가 객체가 수행할 수 있는 책임으로 채워져, 인터페이스를 통해 메시지를 전송
→ 특정 메시지를 수신했을 때, 그에 대한 동작을 수행
→ 메서드는 특정 메시지를 수행하는 방법을 의미
→ 이렇게 메시지와 메서드를 구분했기에, 객체의 내부와 외부를 분리된 영역으로 구분할 수 있고, 다형성을 통해 다양한 타입의 객체를 수용할 수 있는 유연성 부과
객체가 책임을 수행하기 위해 메시지를 받기 위한 통로인 인터페이스
→ 객체가 다른 객체와 협력하기 위한 접점
맷 와이스펠드의 인터페이스 관련 세 가지 원칙
좀 더 추상적인 인터페이스최소 인터페이스인터페이스와 구현 간에 차이가 있다는 점을 인식객체를 구성하지만 인터페이스에 해당하지 않는 모든 것
객체의 상태객체의 행동(메서드)객체 외부에 노출되는 인터페이스와 내부에 숨겨지는 구현을 명확하게 분리해서 고려
→ 외부에 공개되는 인터페이스와 내부에 감춰지는 구현, 두 가지 영역으로 나누어 설계
변경에 대한 안전지대와 위험 지대를 구분
→ 안전지대를 만드는 것은 객체를 더욱 자율적이게 만듬
→ 이 안전지대에서 변경을 주었을 때에는 외부에 어떤 변경사항도 야기해서는 안됨
이 원칙을 수행하기 위한 객체 설계 방법
→ 캡슐화
객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것
(정보 은닉이라고도 함)
상태와 행위의 캡슐화
데이터 캡슐화사적인 비밀의 캡슐화
인터페이스공용 인터페이스첫 번째 이유 - 자율적인 책임은 협력을 단순하게 만듬
→ 세부사항을 무시하고 의도만을 명확하게 표현하면, 협력을 이해하기 쉽게 됨
→ 책임이 적절하게 추상화 됨
두 번째 이유 - 자율적인 책임은 모자 장수의 외부와 내부를 명확하게 분리
→ 책임이 자율적이기에, 책임만 완수한다면 어떻게 동작할지는 모자 장수의 몫
→ 요청하는 객체가 몰라도 되는 사적인 부분은 캡슐화 됨
→ 인터페이스와 구현이 분리됨
세 번째 이유 - 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않음
→ 변경에 의한 파급효과가 객체 내부만으로 한정됨
→ 두 객체 간의 결합도가 낮아짐
네 번째 이유 - 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공
→ 다양한 문맥에서 재사용할 수 있게 됨
→ 설계가 유연해지고, 재사용성이 높아짐
다섯 번째 이유 - 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워짐
→ 책임이 자율적일수록 객체의 응집도를 높은 상태로 유지하기 쉬워짐