본문 바로가기
  • 1+1=3
독서/개발관련

[객체지향의 사실과 오해] 1장 - 협력하는 객체들의 공동체

by 여스 2021. 12. 23.
반응형

~38페이지.

 

하루만에 읽지 못할 거 아니까, 읽은 곳 까지만이라도 조금씩 기록을 해보자.

 

 

커피주문이라는 협력

커피주문을 하기 위해선 손님, 캐시어, 바리스타가 필요하다. 손님이 주문하면, 캐시어가 받고, 바리스타가 커피를 만든다. 즉, 커피주문이라는 '협력'에 손님, 캐시어, 바리스타가 참여하는 것이다.

 

요청과 응답

손님은 캐시어에게 커피주문하면서 커피달라고 '요청'을 하고, 캐시어는 바리스타에게 주문을 전달하면서 만들라고 '요청'을 한다.

거꾸로, 바리스타는 커피를 만들고 캐시어에게 '응답'을 하고, 캐시어는 손님에게 다 만들었다고 알려주면서 또 '응답'을 한다.

 

역할과 책임

손님이라는 '역할'을 가진 사람은 주문할 '책임'을 가지고 있고, 캐시어라는 '역할'을 가진 사람은 주문을 받는 '책임을 지니고, 바리스타라는 '역할'을 가진 사람은 커피를 만들 '책임'이 있다.

 

커피주문이란 협력관계를 객체지향으로 바꿔보자

사람 -> 객체각 역할들의 요청 -> 메시지요청하는 방법 -> 메서드

 

객체의 덕목: 협력적, 자율적

실제로 협력에 참여하는 주체는 객체이다. 커피주문도 결국엔 사람들이 하는 것이므로...

협력 공동체 일원들과 마찬가지로, 객체들도 두가지 덕목이 있어야 한다.

첫째, 객체는 협력적이어야 한다. 다른 객체의 요청에 귀 기울이고, 도움도 적극적으로 요청해야 한다. 고로 god object는 스스로 자멸하고 만다.

둘째, 객체는 충분히 자율적이어야 한다. '자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것'을 의미한다. 마치 캐시어가 손님에게 음료를 주문하는 절차나 바리스타에게 접수내역을 전달하는 방법은 스스로 결정하는 것과 같은 이치이다.

 

- '자율적'인 객체

객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.

객체의 사적인 부분은 객체 스스로 관리하고 외부에서 일체 간섭할 수 없도록 차단해야 하며, 객체의 외부에서는 접근이 허락된 수단만을 통해서 객체와 의사소통해야 함.

즉, 객체는 다른 객체가 '무엇(what)'을 수행하는지는 알 수 있지만 '어떻게(how)' 수행하는지에 대해서는 알 수 없다.

-> 커피주문 협력과정에서 생각해보면..

바리스타(=객체)는 커피제조방법을 기억하고 있고(='상태(state)'를 지닌다), 자신이 알고 있는 방법으로 커피를 제조한다(=행동을 스스로 결정함)

 

 

-메시지와 메서드

캐시어가 바리스타에게 요청을 하는데, 객체지향에서는 요청방법이 "메시지"가 유일하다. 

바리스타는 자신만의 방법으로 커피제조요청(메시지)을 처리하는데, 이 메시지 처리방법을 "메서드"라 한다.

여기서, 메시지와 메서드를 분리하는 것이 객체의 자율성을 높이는 핵심 메커니즘이다. 추후 캡슐화와 연관이 있다고 한다.

 

객체지향의 본질

- 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용하여 시스템을 분할하는 방법

- 자율적인 객체란 상태행위를 함께 지니며 스스로 자기자신을 책임지는 객체

- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.

- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.

 

 

 

 

마치며....

클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중할 것. 객체지향은 클래스지향이 아니다.

반응형

댓글