Taking baby-developer steps

[객체지향의 사실과 오해] 5. 책임과 메시지 0. 추상적이면서 구체적인 책임 본문

CS 지식/객체지향

[객체지향의 사실과 오해] 5. 책임과 메시지 0. 추상적이면서 구체적인 책임

Surin Lee 2023. 11. 30. 20:45

 

"명확하게 정의된 역할과 책임을 지닌 객체들을 상호 협력하게 하라"

자율적인 객체 -> 책임의 수준 역시 자율적

 스스로의 의지와 판단에 따라 각자 맡은 책임(요청을 처리하기 위해 객체가 수행하는 행동)을 수행하는 객체를 자율적인 객체라 한다. 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야한다.

예를 들어, 앞서 커피 주문에 협력하는 예시에서, 커피를 만드는 역할을 바리스타 객체의 경우 "카페라떼 한잔"을 요청 받았을 때, "에티오피아 원두 30g을 갈아라" "원두에서 2개의 샷을 추출해라" "90도씨로 우유 200ml을 2분간 스팀하라"라는 요청을 받았을 때 보다 커피 제작 방식을 자율적으로 선택할 수 있다.

너무 추상적인 책임

 그러나 과도하게 포괄적이고 추상적인 책임 역시 좋지 않다. 바리스타에게 "만들어라"라는 요청을 준 경우, 바리스타는 무엇을 얼만큼 만들어야하는지, 협력의 의도를 파악하지 못한다. 

 분명 추상화되고 포괄적인 책임은 협력을 좀 더 다양한 환경에서 재사용 할 수 있고 유연성이 높아진다. 그러나 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이어야 한다.

 이 "충분히 추상적이면서 충분히 구체적인" 정도는 협력의 문맥에 따라 달라진다.

"어떻게"가 아니라 "무엇을"

 자율적인 책임은 "어떻게(how)" 해야하는 가가 아니라 "무엇을(what)"을 해야 하는가를 설명한다. "카페라떼 한잔"이라는 요청은 "무엇"을 해야 하는 가는 설명하지만 "어떻게" 해야하는지는 전혀 언급하지 않아, 바리스타가 자율적으로 수단과 방법을 선택할 수 있다. 

메시지로 책임을 자극하라

 객체가 할당된 책임을 수행하게 하는 것은 외부에서 전달되는 요청이다. 이 메시지는 객체를 행동을 수행하게 하는 유일한 방법이다.


참고문헌 : 객체지향의 사실과 오해

Comments