본문 바로가기

객체지향의 사실과 오해

객체지향의 사실과 오해 1장 _ 1

객체지향이란 ?

 

"객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"

 

객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 캡슐화(encapsulation) 하는 소프트웨어 객체의 자율성을 설명하는데 효과적이다.

현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성해 나가는 과정을 메시지를 주고 받으며 공동의 목표를 달성하기 위해 '협력'하는 객체들의 관계를 설명하는 데 적합하다.

실세계의 사물을 기반으로 소프트웨어 객체를 식별하고 구현까지 어어간다는 개념은 객체지향 설계의 핵심 사상인 "연결완전성"을 설명하는데 적합한 틀을 제공한다.

역할, 책임, 협력의 예시

커피 주문을 예로 들면,

역할 : 커피를 주문하는 손님, 주문을 받는 캐시어, 커피를 제조하는 바리스타

협력 : 손님은 커피를 주문하고 , 캐시어, 바리스타는 손님에게 커피를 제공하는 

책임 : 협력하기 위해 책임을 다함

 

=> 협력에 참여하는 모든 사람들은 커피가 정확하게 주문되고 전달할 수 있도록 역할과 책임을 다하고 있는 것이다!!

 

요청과 응답으로 구성된 협력

 

하나의 문제를 해결하기 위해 다수의 역할이 필요하기에 한 사람에 대한 요청이 또 다른 사람에 대한 요청을 유발하는 것이 일반적이다.

따라서 아래와 같이 요청은 연쇄적으로 발생하고 그에 대한 응답이 발생한다.

 

요청과 응답을 통해 사람끼리 협력하는 것이다.

 

 

 

역할과 책임

사람들이 협력하는 과정속에서 역할을 부여받는다.

역할 : 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미 !

 

관련된 중요한 개념

1. 여러 사람이 동일한 역할을 수행할 수 있다.

캐시어 입장에서  전달한 주문에 내역에 맞게 커피를 제조할 수 있다면 어떤 바리스타가 커피를 제조하더라고 상관없다

 

2. 역할은 대체 가능성을 의미한다.

캐시어는 대체 가능(substitutable) 하다. 캐시어가 두명 있어도 주문만 받으면 상관없다.

 

3. 책임을 수행하는 방식은 자율적으로 선택할 수 있다.

커피를 제조하라는 같은 요청을 받아도 바리스타마다  향기, 모양, 온도 등 사람마다 서로 다른 방식으로 요청을 처리할 수 있다.이렇게 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력을 "다형성" 이라고 한다. 

 

4. 한 사람이 동시에 여러 역할을 수행할 수 있다.

알바와 바리스타가 현재는 개별의 역할로 묘사했지만 동시에 둘 이상의 역할을 수행하는 것도 가능하다.

 

실제 역할, 책임, 협력

 

위의 커피를 주문하는 과정에서사람 = 객체, 요청 = 메시지, 요청을 처리하는 방식 = 메서드

 

협력의 핵심특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성하는 것 !목표는 사람들의 협력을 통해 달성되고, 목표는 더 작은 책임으로 분할되고 ! 책임을 수행하는 적절한 역할을 가진 사람에 의해 수행된다.

 

"어떤 객체도 섬이 아니다"

 

결론적으로 시스템은 역할과 책임을 수행하는 객체로 분할되고, 시스템의 기능은 객체간의 연쇄적인 요쳥과 응답의 흐름으로 구성된 협력으로 구현되기 때문에, 책임을 제대로 분할하는 것이 가장 중요한 요소이다.

 

협력 속에 사는 객체

 

윤곽을 결정하는 것은 역할, 책임, 협력이지만 실제로 협력에 참여하는 주체는 객체이다.1. 객체는 충분히 '협력적'이여야 하고 다른 객체에 도움을 요청할정도로 열린 마음을 지녀야한다.2. 객체는 충분히 '자율적'이여야 한다.

 

객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.객체는 다른 객체가 무엇을 수행하는지는 알지만 어떻게 수행하는지는 모른다.

 

 

 

 

'객체지향의 사실과 오해' 카테고리의 다른 글

객체지향의 사실과 오해 1장 _ 2  (0) 2024.06.05