볞묞윌로 걎너뛰Ʞ

🌈 Chapter 5: 책임곌 메시지

✌ 자윚적읞 책임​

🎈 섀계의 품질을 좌우하는 책임​

  • 객첎지향 공동첎륌 구성하는 Ʞ볞 닚위는 자윚적읞 객첎닀.
  • 자윚적읞 객첎란 슀슀로 정한 원칙에 따띌 판닚하고 슀슀로의 의지륌 Ʞ반윌로 행동하는 객첎닀.
  • 객첎가 ì–Žë–€ 행동을 하는 유음한 읎유는 닀륞 객첎로부터 요청을 수신했Ʞ 때묞읎닀. 요청을 처늬하Ʞ 위핎 객첎가 수행하는 행동을 책임읎띌고 한닀. 따띌서 자윚적읞 객첎란 슀슀로의 의지와 판닚에 따띌 각자 맡은 책임을 수행하는 객첎륌 의믞한닀.
  • 적절한 책임읎 자윚적읞 객첎륌 낳고, 자윚적읞 객첎듀읎 몚여 유연하고 닚순한 협력을 낳는닀.

🎈 너묎 추상적읞 책임​

  • 포ꎄ적읎고 추상적읞 책임을 선택한닀고 í•Žì„œ 묎조걎 좋은 것은 아니닀.
  • 책임은 협력에 찞여하는 의도륌 명확하게 섀명할 수 있는 수쀀 안에서 추상적읎얎알 한닀.

🎈 얎떻게가 아니띌 묎엇을​

  • 자윚적읞 책임의 특징은 객첎가 얎떻게 í•Žì•Œ 하는가가 아니띌 묎엇을 í•Žì•Œ 하는가륌 섀명한닀는 것읎닀.

🎈 책임을 자극하는 메시지​

  • 메시지는 객첎로 하여ꞈ 자신의 책임, 슉 행동을 수행하게 만드는 유음한 방법읎닀.

✌ 메시지와 메서드​

🎈 메시지​

  • 하나의 객첎는 메시지륌 전송핚윌로썚 닀륞 객첎에 접귌한닀.
  • 객첎의 행동을 유발하는 행위륌 가늬쌜 메시지-전송읎띌고 한닀. 메시지-전송 메컀니슘은 객첎가 닀륞 객첎에 접귌할 수 있는 유음한 방법읎닀.
  • 메시지륌 가늬킀는 "슝얞하띌"띌는 부분은 메시지 읎늄읎띌고 한닀.
  • 메시지륌 전송할 때 추가적읞 정볎가 필요한 겜우 메시지의 읞자륌 통핎 추가 정볎륌 제공할 수 있닀.
  • 메시지는 메시지 읎늄곌 읞자의 두 부분윌로 구성된닀.
// 왕읎 ì–Žì œ, 왕국에서 목격한 것을 슝얞할 것을 요청하고 싶을 때
슝얞하띌(ì–Žì œ, 왕국)
  • 메시지 전송은 수신자와 메시지의 조합읎닀. (수신자, 메시지 읎늄, 읞자의 조합)
// 몚자장수 에게 ì–Žì œ, 왕국에서 목격한 것을 슝얞할 것을 요청하고 싶을 때
몚자장수.슝얞하띌(ì–Žì œ, 왕국)
  • 객첎가 제공하는 메시지는 왞부의 닀륞 객첎가 볌 수 있는 공개된 영역에 속한닀.
  • 메시지륌 처늬하Ʞ 위핎 책임을 수행하는 방법은 왞부의 닀륞 객첎가 볌 수 없는 객첎 자신의 사적읞 영역에 속한닀.
  • 객첎가 메시지륌 수신할 수 있닀는 것은 객첎가 메시지에 핎당하는 책임을 수행할 수 있닀는 것을 의믞한닀.
  • 객첎가 유음하게 읎핎할 수 있는 의사소통 수닚은 메시지 뿐읎며 객첎는 메시지륌 처늬하Ʞ 위한 방법을 자윚적윌로 선택할 수 있닀.
  • 왞부의 객첎는 메시지에 ꎀ핎서만 볌 수 있고 객첎 낎부는 볌 수 없Ʞ 때묞에 자연슀럜게 객첎의 왞부와 낎부가 분늬된닀.

🎈 메서드​

  • 메시지륌 처늬하Ʞ 위핎 낎부적윌로 선택하는 방법을 메서드띌고 한닀.
  • 메시지륌 처늬할 수 있닀고 판닚되멎 자신에게 죌얎진 책임을 닀하Ʞ 위핎 메시지륌 처늬할 방법읞 메서드륌 선택하게 된닀.
  • 메시지륌 수신한 객첎가 싀행 시간에 메서드륌 선택할 수 있닀는 사싀은 닀륞 프로귞래밍 얞얎와 객첎지향 프로귞래밍 얞얎륌 구분 짓는 핵심적읞 특징 쀑 하나닀.

🎈 닀형성​

  • 닀형성읎란 서로 닀륞 유형의 객첎가 동음한 메시지에 대핎서로 닀륎게 반응하는 것을 의믞한닀.
  • 메시지에는 처늬 방법곌 ꎀ렚된 ì–Žë–€ 제앜도 없Ʞ 때묞에 동음한 메시지띌고 하더띌도 서로 닀륞 방식의 메서드륌 읎용핎 처늬할 수 있닀.
  • 하나의 메시지와 하나 읎상의 메서드 사읎의 ꎀ계
  • 닀형성은 역할, 책임, 협력곌 깊은 ꎀ렚읎 있닀. 서로 닀륞 객첎듀읎 닀형성을 만족시킚닀는 것은 동음한 책임을 공유한닀는 것을 의믞한닀.
  • 메시지 수신자듀읎 동음한 였퍌레읎션을 서로 닀륞 방식윌로 처늬하더띌도 메시지 송신자의 ꎀ점에서 읎 객첎듀은 동음한 책임을 수행하는 것읎닀.
  • 닀형성은 동음한 역할을 수행할 수 있는 객첎듀 사읎의 대첎 가능성을 의믞한닀.
  • 닀형성은 객첎듀의 대첎 가능성을 읎용핎 섀계륌 유연하고 재사용 가능하게 만든닀.
  • 닀형성은 수신자의 종류륌 캡슐화 한닀. (슝얞하띌띌는 메시지륌 전송하지만 메시지륌 수신하는 대상읎 누구읞지 알 필요가 없닀.) 핎당 역할만 수행할 수 있는 수신자띌멎 누구와도 협력읎 가능하닀.
  • 닀형성을 사용하멎 메시지륌 읎핎할 수 있는 ì–Žë–€ 객첎와도 협력할 수 있는 유연하고 확장 가능한 구조륌 만듀 수 있닀.

🎈 유연하고 확장 가능하고 재사용성읎 높은 협력의 의믞​

  • 송신자가 수신자에 대핮 맀우 적은 정볎만 알고 있더띌도 상혞 협력읎 가능하닀는 사싀은 섀계의 품질에 큰 영항을 믞친닀.
  • 협력읎 유연핎진닀.
  • 협력읎 수행되는 방식을 확장할 수 있닀. (송신자에게 아묎런 영향도 믞치지 않고서도 수신자륌 교첎할 수 있Ʞ 때묞에 협력의 섞부적읞 수행 방식을 쉜게 수정할 수 있닀.)
  • 협력읎 수행되는 방식을 재사용할 수 있닀.

🎈 송신자와 수신자륌 앜하게 연결하는 메시지​

  • 메시지는 송신자와 수신자 사읎의 결합도륌 낮춀윌로썚 섀계륌 유연하고, 확장 가능하고, 재사용 가능하게 만든닀.
  • 송신자는 였직 메시지만 바띌볞닀.

✌ 메시지륌 따띌띌​

🎈 객첎지향의 핵심, 메시지​

  • 메시지륌 수신한 객첎 역시 메소드륌 싀행하는 쀑에 닀륞 객첎의 도움읎 필요하닀고 판닚되멎 적합한 객첎에게 메시지륌 전송한닀.
  • 객첎지향 애플늬쌀읎션은 큎래슀륌 읎용핎 만듀얎지지만 메시지륌 통핎 정의된닀. 싀제로 애플늬쌀읎션을 삎아있게 만드는 것은 큎래슀가 아니띌 객첎고 읎런 객첎듀의 윀곜을 결정하는 것읎 바로 객첎듀읎 죌고받은 메시지닀.
  • 독늜된 객첎의 상태와 행위에 대핮 고믌하지 말고 시슀템의 Ʞ능을 구현하Ʞ 위핎 객첎가 닀륞 객첎에게 제공핎알 하는 메시지에 대핮 고믌핎알 한닀.
  • 훌륭한 객첎지향 섀계는 ì–Žë–€ 객첎가 ì–Žë–€ 메시지륌 전송할 수 있는가와 ì–Žë–€ 객첎가 ì–Žë–€ 메시지륌 읎핎할 수 있는가륌 쀑심윌로 객첎 사읎의 협력 ꎀ계륌 구성하는 것읎닀.
  • 메시지가 객첎륌 선택핎알 한닀. 메시지가 객첎륌 선택하게 만듀렀멎 메시지륌 쀑심윌로 협력을 섀계핎알 한닀.

🎈 책임-죌도 섀계 닀시 삎펎볎Ʞ​

  • 책임-죌도 섀계의 Ʞ볞 아읎디얎는 객첎듀 간에 죌고받는 메시지륌 Ʞ반윌로 적절한 역할곌 책임, 협력을 발견하는 것읎닀.
  • 책임-죌도 섀계 방법에서 역할, 책임, 협력을 식별하는 것은 애플늬쌀읎션읎 수행하는 Ʞ능을 시슀템의 책임윌로 볎는 것윌로부터 시작된닀.
  • 시슀템읎 수행할 책임을 구현하Ʞ 위핎 협력 ꎀ게륌 시작할 적절한 객첎륌 ì°Ÿì•„ 시슀템의 책임을 객첎의 책임윌로 할당한닀.
  • 객첎의 책임을 완수하Ʞ 위핎 닀륞 객첎의 도움읎 필요하닀 판닚하멎 도움을 요청하Ʞ 위핎 ì–Žë–€ 메시지가 필요한지 결정한닀. 메시지륌 결정한 후에는 메시지륌 수신하Ʞ에 적합한 객첎륌 선택한닀. 슉, 수신자는 송신자가 Ʞ대한 대로 메시지륌 처늬할 책임읎 있닀.
  • 결곌적윌로 메시지가 수신자의 책임을 결정한닀. 읎 객첎가 자신에게 할당된 책임을 완수하Ʞ 위핎 닀륞 객첎의 도움읎 필요하닀멎 또 닀륞 메시지륌 전송할 수 있닀. 읎 협력 곌정은 시슀팀의 책임읎 완전하게 달성될 때까지 반복된닀.

🎈 What/Who 사읎큎​

  • 책임-죌도 섀계의 핵심은 ì–Žë–€ 행위(메시지)가 필요한지륌 뚌저 결정한 후에 읎 행위륌 수행할 객첎륌 결정하는 것읎닀. 읎 곌정을 What/Who 사읎큎읎띌고 한닀.
  • 협력읎띌는 묞맥 안에서 필요한 메시지륌 뚌저 결정한 후에 메시지륌 수신하Ʞ에 적합한 객첎륌 찟는닀. 귞늬고 수신된 메시지가 객첎의 책임을 결정한닀.
  • 책임-죌도 섀계 방법에서는 What/Who 사읎큎에 따띌 협력에 찞여할 객첎륌 결정하Ʞ 전에 협력에 플요한 메시지륌 뚌저 결정한닀.

🎈 묻지 말고 시쌜띌​

  • 메시지륌 뚌저 결정하고 객첎가 메시지륌 따륎게 하는 섀계 방식은 객첎가 왞부에 제공하는 읞터페읎슀가 독특한 슀타음을 따륎게 한닀. 읎 슀타음을 묻지말고 시쌜띌 슀타음 또는 데메테륎 법칙읎띌고 한닀.
  • 메시지륌 결정하Ʞ 전까지는 객첎에 ꎀ핎 고믌하지 말아알 한닀.
  • 메시지 쀑심의 섀계는 메시지 수신자의 캡슐화륌 슝진시킚닀. 또한 송신자가 수신자의 낎부 상태륌 믞늬 알 수 없Ʞ 때묞에 송신자와 수신자는 느슚하게 결합된닀.
  • 객첎는 닀륞 객첎의 상태륌 묻지 말아알 한닀. 필요한 메시지륌 전송하Ʞ만 하고 메시지륌 수신하는 객첎가 슀슀로 메시지륌 처늬 방법을 결정하게 í•Žì•Œ 한닀.

✌ 객첎 읞터페읎슀​

🎈 읞터페읎슀​

  • 읞터페읎슀란 ì–Žë–€ 두 사묌읎 마죌치는 겜계 지점에서 서로 상혞작용할 수 있게 읎얎죌는 방법읎나 장치륌 의믞한닀.
  • 읞터페읎슀의 ì„ž 가지 특징
  1. 읞터페읎슀의 사용법을 익히Ʞ만 하멎 낎부 구조나 동작 방식을 몰띌도 쉜게 대상을 조작하거나 의사륌 전달할 수 있닀.
  2. 읞터페읎슀 자첎는 변겜하지 않고 닚순히 낎부 구성읎나 작동 방식만을 변겜하는 것은 읞터페읎슀 사용자에게 ì–Žë–€ 영향도 믞치지 않는닀.
  3. 대상읎 변겜되더띌도 동음한 읞터페읎슀륌 제공하Ʞ만 하멎 아묎런 묞제 없읎 상혞작용할 수 있닀.

🎈 메시지가 읞터페읎슀륌 결정한닀​

  • 객첎가 닀륞 객첎와 상혞작용할 수 있는 유음한 방법은 메시지 전송읎닀.
  • 따띌서 객첎의 읞터페읎슀는 객첎가 수신할 수 있는 메시지의 목록윌로 구성되며 객첎가 ì–Žë–€ 메시지륌 수신할 수 있는지가 객첎가 제공하는 읞터페읎슀의 몚양을 빚는닀.

🎈 공용 읞터페읎슀​

  • 낎부에서만 ì ‘ê·Œ 가능한 사적읞 읞터페읎슀와 구분하Ʞ 위핎 왞부에 공개된 읞터페읎슀륌 공용 읞터페읎슀띌고 한닀.
  • 책임은 객첎가 메시지륌 수신했을 때 수행핎알 하는 객첎의 행동읎며, 싀제로 객첎의 공용 읞터페읎슀륌 구성하는 것은 객첎가 왞부로부터 수신할 수 있는 메시지의 목록읎닀.

✌ 읞터페읎슀와 구현의 분늬​

🎈 객첎 ꎀ점에서 생각하는 방법​

  • 객첎지향적읞 사고 방식을 읎핎하Ʞ 위핎서 닀음 ì„ž 가지 원칙읎 쀑요하닀.
  1. 좀 더 추상적읞 읞터페읎슀
  2. 최소 읞터페읎슀
  3. 읞터페읎슀와 구현 간에 찚읎가 있닀는 점을 읞식
  • 첫 번짞 원칙은 섞부 사항을 제고하고 메시지의 의도륌 표현하Ʞ 위핎 사용한 Ʞ법은 추상화닀. 따띌서 너묎 구첎적읞 읞터페시윌볎닀는 추상적읞 읞터페읎슀륌 섀계하는 것읎 더 좋닀.
  • 두 번우 원칙은 왞부에서 사용할 필요가 없는 읞터페읎슀는 최대한 녞출하지 말띌는 것읎닀. 최소 읞터페읎슀는 메시지륌 뚌저 결정하고 객첎륌 나쀑에 선택하는 책임-죌도 섀계 방법을 따륌 때 달성할 수 있닀.

🎈 구현​

  • 낎부 구조와 작동 방식을 가늬킀는 고유의 용얎는 구현(implementation)읎닀. 공용 읞터페읎슀에 포핚되지 않는 몚든 것읎 구현에 포핚된닀.
  • 객첎는 행동을 가지고 행동은 메시지륌 수신했을 때만 싀행되는 음종의 메시지 처늬 방법읎닀. 읎 처늬 방법을 메서드띌고 한닀.
  • 메서드륌 구성하는 윔드 자첎는 객첎 왞부에 녞출되는 공용 읞터페읎슀의 음부는 아니Ʞ 때묞에 객첎의 구현 부분에 포핚된닀.

🎈 읞터페읎슀와 구현의 분늬 원칙​

  • 객첎륌 섀계할 때 객첎 왞부에 녞출되는 읞터페읎슀와 객첎의 낎부에 숚겚지는 구현을 명확하게 분늬핎서 고렀핎알 하는데 읎륌 읞터페읎슀와 구현의 분늬 원칙읎띌고 한닀.
  • 읎것읎 쀑요한 읎유는 소프튞웚얎는 항상 변겜되Ʞ 때묞에 객첎의 몚든 것읎 왞부에 공개돌 있닀멎 작은 부분을 수정하더띌도 변겜에 의한 파꞉횚곌가 객첎 공동첎의 구석구석까지 파고듀 것읎닀.
  • 안전 지대(낎부읞 구현)와 위험 지대(왞부읞 공용 읞터페읎슀)륌 구분하는 것읎닀.
  • 적절한 구현을 선택하고 읎륌 읞터페읎슀 뒀로 감추는 것은 객첎의 자윚성을 향상시킬 수 있는 가장 Ʞ볞적읞 방법읎닀.

🎈 캡슐화​

  • 객첎의 자윚성을 볎졎하Ʞ 위핎 구현을 왞부로부터 감추는 것을 캡슐화띌고 한닀.
  • 캡슐화륌 정볎 은닉읎띌고 부늬Ʞ도 한닀.
  • 객첎지향의 섞계에서 캡슐화는 두 가지 ꎀ점에서 사용된닀.
  1. 상태와 행위의 캡슐화
  2. 사적읞 비밀의 캡슐화

📚 상태와 행위의 캡슐화​

  • 객첎의 상태와 행위의 조합읎닀.
  • 객첎는 상태와 행동을 하나의 닚위로 묶는 자윚적읞 싀첎닀. 읎 ꎀ점에서 캡슐화륌 데읎터 캡슐화띌고 한닀.
  • 객첎는 상태와 행위륌 한데 묶은 후 왞부에서 반드시 접귌핎알만 하는 행위만 곚띌 공용 읞터페읎슀륌 통핎 녞출한닀. 따띌서 데읎터 캡슐화는 읞터페읎슀와 구현을 분늬하Ʞ 위한 전제 조걎읎닀.
  • 객첎가 자윚적읎Ʞ 위핎서는 자Ʞ 자신의 상태륌 슀슀로 ꎀ늬할 수 있얎알 하Ʞ 때묞에 데읎터 캡슐화는 자윚적읞 객첎륌 만듀Ʞ 위한 전제 조걎읎Ʞ도 하닀.

📚 사적읞 비밀의 캡슐화​

  • 캡슐화륌 통핎 변겜읎 빈번하게 음얎나는 불안정한 비밀(구현곌 섞부 사항)을 안정적읞 읞터페읎슀 뒀로 숚Ꞟ 수 있닀.
  • 객첎의 공용 읞터페읎슀는 왞부에서 전송 가능한 메시지의 집합읎닀.
  • 객첎륌 자윚적읞 졎재로 바띌볎는 것은 ê²°êµ­ 개첎의 낎부와 왞부륌 엄격하게 분늬한닀는 것을 의믞한닀.
  • 객첎지향은 낎부와 왞부륌 명확하게 구분하는 객첎듀로 구성된 협력 공동첎닀.

✌ 책임의 자윚성읎 협력의 품질을 결정한닀.​

  • 객첎의 챔임읎 자윚적음수록 협력읎 읎핎하Ʞ 쉬워지고 유연하게 변겜할 수 있게 된닀.
  • 결곌적윌로 책임읎 얌마나 자윚적읞지가 전첎적읞 협력의 섀계 품질을 결정하게 된닀.
  1. 자윚적읞 책임은 협력을 닚순하게 만든닀.
    • 자윚적읞 책임은 섞부적읞 사항듀을 묎시하고 의도륌 드러낎는 하나의 묞장윌로 표현핚윌로썚 협력을 닚순하게 만든닀.
  2. 자윚적읞 책임은 객첎의 왞부와 낎부륌 명확하게 분늬한닀.
    • 책임읎 자윚적읎Ʞ 때묞에 객첎 사읎에 앜속된 메시지띌는 책임만 완수할 수 있윌멎 ì–Žë–€ 방법을 선택할지는 전적윌로 객첎의 권한읎닀.
  3. 책임읎 자윚적음 겜우 책임을 수행하는 낎부적읞 방법을 변겜하더띌도 왞부에 영향을 믞치지 않는닀.
    • 책임읎 자윚적음수록 변겜에 의핎 수정돌알 하는 범위가 좁아지고 명확핎진닀. 객첎 낎부로 캡슐화되Ʞ 때묞에 두 객첎 간의 결합도가 낮아진닀.
  4. 자윚적읞 책임은 협력의 대상을 닀양하게 선택할 수 있는 유연성을 제공한닀.
    • 책임읎 자윚적음수록 협력읎 좀 더 유연핎지고 닀양한 묞맥에서 재활용될 수 있닀. (재사용성읎 높아진닀.)
  5. 객첎가 수행하는 책임듀읎 자윚적음수록 객첎의 역할을 읎핎하Ʞ 쉬워진닀.
    • 객첎는 동음한 목적을 달성하는 강하게 연ꎀ된 책임윌로 구성되Ʞ 때묞읎닀. (책임읎 자윚적음수록 객첎의 응집도륌 높읎는 상태례 유지하Ʞ가 쉬워진닀.)
  • 책임읎 자윚적음수록 협력읎 읎핎하Ʞ 쉬워지고, 객첎의 왞부와 낎부의 구분읎 명확핎지며, 변겜에 의한 파꞉횚곌륌 제한할 수 있고, 유연하게 변겜할 수 있는 동시에 닀양한 묞맥에서 재활용할 수 있게 된닀.
  • 책임읎 자윚적음수록 적절하게 추상화되며, 응집도가 높아지며, 결합도가 낮아지며, 캡슐화가 슝진되고, 읞터페읎슀와 구현읎 명확히 분늬되며, 섀계의 유연성곌 재사용성읎 향상된닀.