본문 바로가기

책 리뷰

책 리뷰 - 객체지향의 사실과 오해1

728x90
반응형

 

 

강사님께서 이책을 읽을 때 객체지향의 이해에 도움이 된다고 하셨다. 또 운 좋게도 책을 얻을 수 있게되어 일주일에 두 챕터씩 읽어보고자 한다. 개념적으로 내가 기억 하고 있으면 좋을 만한거 위주로 정리할 것이다. 아 객체지향 너무 알고 싶다.

01 / 협력하는 객체들의 공동체

 

객체지향 프로그래밍


현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업. 그 결과물인 객체지향 소프트웨어의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화다.

 

객체들의 관계


협력하며 목표를 달성해 나가는 과정은 '메시지'를 주고받으며 공동의 목표를 달성하기 위해 '협력'한다.

 

음료 주문 과정:

커피를 주문하고 , 캐시어가 주문 받고, 바리스타가 커피를 제조한다.
역할, 책임, 협력의 세가지 개념이 어울려 만들어 낸 것
주문하는 손님, 주문 받는 캐시어, 커피 제조하는 바리스타 역할이 있고 서로 협력한다.
도움을 요청(request)한다. , 사람에 대한 요청이 또 다른사람에 대한 요청을 유발한다. 요청은 연쇄적으로 발생한다.

 

손님 -- 커피주문 --> 캐시어 -- 커피 제조 --> 바리스타
손님 <-- 커피완성 -- 캐시어 <-- 커피완성 -- 바리스타

 

요청을 받은 사람은 주어진 책임을 다하면서 지식이나 서비스를 제공한다. 즉
-> 응답(response)한다.
응답 역시 요청의 반대방향으로 연쇄적 전달.
=> 요청과 응답을 통해 다른사람과 '협력'한다.

"사람들이 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다."

 

1.여러 사람이 동일한 역할을 수행할 수 있다.
손님은 어떤 캐시어가 주문받는지 중요하지 않다. 이행만하면된다!


2. 역할은 대체 가능성을 의미한다.
두 명다 커피를 만들 줄 안다면 둘 중 누구에게 요청해도 상관없다!


3. 책임을 수행하는 방법은 자율적으로 선택할 수 있다
커피 제조방법은 다양함 ! 같은 요청이라도 다르게 처리할 수 있다=> 다형성


4. 한사람이 동시에 여러 역할을 수행할 수 있다.
캐시어, 바리스타 동시에 해도됨!

 

사람: 객체
에이전트의 요청: 메시지
요청 처리하는 방법: 메서드
=> 타인과 관계를 맺으며 협력하는 과정과 유사하다

 

역할
관련성 높은 책임의 집합
객체지향 설계는 적절한 객체에게 적절한 책임을 할당하는 것부터 시작한다.
역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소다.
대체 가능한 역할과 책임은 객체지향 패러다임의 중요한 기반을 제공하는 다형성과 연관돼 있다.

 

객체는 애플리케이션의 기능을 구현하기 위해 존재!


1. 객체는 협력적이어야한다.
다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움 요청할 정도로 열린 마음을 지녀야한다.
2. 객체가 자율적이어야 한다.
자기스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제해야한다! -> 캐시어는 손님이 주문하면 행동을 시작하지만 손님에게 음료를 주문하는 절차나 바리스타에게 접수 내역 전달 방법은 스스로 결정함!!

 

객체는
상태(state) 행동(behavior)을 함께 지닌 실체
스스로 결정하는 자율적인 존재로 남기 위해서 필요한 행동과 상태를 함께 지니고 있어야한다.

 

객체의 자율성
내부 외부 명확히 구분
객체 스스로 관리하고 외부에서 간섭하지 못함, 허락된 수단통해서만 의사소통, 뭘하는지 알 수 있지만 어떻게 수행했는지는 알 수 없음
=> 유지보수가 쉽고 재사용이 용이한 시스템 구축

 

메시지:
인간은 말, 글자등 협력을 위한 다양한 의사소통할 수 있다.
객체지향에서는 한가지 의사소통만 존재한다.
전송하는 객체: 송신자(sender)
수신하는 객체: 수신자(receiver)

 

메서드:
수신된 메시지를 처리하는 방법
메시지 전송하면 특정 메서드가 실행된다.
메시지, 메서드 분리는 객체의 협력에 참여하는 객체들 간의 자율성 증진
커피요청(메시지) ,커피를 제조(메소드)하는 구체적인 방법(자율적): 구체적인 방법에 관해서는 관여하지 않는다.!!
=> 캡슐화: 외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것 : 자율성 ↑

 

객체지향의 본질
1.시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법
2.자율적인 객체란 상태와 행위를 함께 지니며 스스로 자신을 책임지는 객체
3.객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
4.객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는데 적합한 메서드를 자율적으로 선택한다.

 

객체지향의 중심에는 클래스가 아니라 객체가 위치한다.
클래스들의 정적인 관계가 아니라 메시지 주고받는 객체의 동적인관계 중요.
코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고중심을 전환하라! -> 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가??
객체의 역할, 책임, 협력에 집중할 것!

 

회고

 

간단한 현실세계이 이야기를 객체와의 관계 예시로 들어주어서 이해가 빨리되었다. 손님 객체, 캐시어 객체, 바리스타 객체 저마다 역할을 가지고 메시지(요청)을 받고 메소드수행(응답)을 준다. 그리고 각각은 자율성을 가지고 있어 각각 객체가 요청만하지 뭐 어떻게하든 알 수없고 상관쓰지않는다.
나 또한 직장에 있었을때 하나의 객체였다. 요청을 받고 내부적으로 처리해서 응답만 주면 됐었다.
객체지향에 대해 막연한 생각이었지만 어느정도 개념이 생긴 것같다.
개발을 할 때 객체들이 각각 역할을 가지고 서로 객체간 메시지를 주고받으며 협력한다는 시각으로 객체지향을 바라볼 것이다.

 

 

 

 

 

 

반응형