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

현실 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업

이과정에서 객체란 현실 세계에 존재하는 사물에 대한 추상화라는

 

설명은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만

유연하고 실용적인 관점에선 적합하지 않다.

완벽히 일치하는 경우가 거의 없기 때문이다. 예를 들어 소프트웨어 방화벽이 건물의 방화벽과  얼마나 유사하나?

 

 

 

협력하는 사람들

커피 공화국의 아침

역할, 책임, 협력 우리가 삶을 영위하기 위해 다른 사람과 접촉하는 모든 곳에 존재한다.

각각 맡은 역할을 수행하기 위해 협력하는 과정에서 책임을 다한다.

 

하나의 커피를 주문하는 과정을 예를 들어보자

손님, 캐시어, 바리스타는 각각의 역할이 있다. 손님은 커피를 주문하는 역할, 캐시어는 커피를 주문받는 역할, 바리스타는 커피를 제조하는 역할이 있다. 역할을 책임있게 수행하는 과정에서 암묵적인 협력관계가 있다.

커피 주문이라는 협력에 참여하는 모든 사람들은 커피가 정확하게 주문되고 주문된 커피가 손님에게 정확하게 전달될 있도록 맡은 역할과 책임을 다하고 있는 것이다.

 

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

일상에서 발생하는 대부분의 문제는 개인 혼자만의 힘으로 해결하기 버거울 정도로 복잡하다.

때문에 사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공해줄 있는 사람에게 도움을 요청(Request)한다.

 

일반적으로 하나의 문제를 해결하기 위해 다수의 사람 혹은 역할이 필요

때문에대한 요청이 다른 사람에 대한 요청을 유발하는 것이 일반적이다.

따라서 요청은 연쇄적으로 발생한다.(협력이라 표현)

요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공

, 다른 사람의 요청에 응답을 한다.

요청은 연쇄적으로 발생하므로 응답 역시 연쇄적으로 전달된다.

요청과 응답을 통해 다른 사람과 협력할 있는 능력은 거대하고 복잡한 문제를 해결할 있는 공동체를 형성할 있게 만든다.

협력의 성공은 특정한 역할을 맡은 개인이 얼마나 요청을 성실히 이행하는가에 달려 있다.

 

역할과 책임

사람들은 다른 사람과 협력하는 과정 속에서 특정한 역할(role) 부여받는다.

 

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

 

역할은 책임이라는 개념을 내포한다.

선생님 역할은 학생을 가르칠 책임이 있음을 암시한다.

경찰관 역할은 범죄자를 잡을 책임이 있음을 암시한다.

 

특정한 역할은 특정한 책임을 암시한다.

 

사람들이 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다는 사실은 몇 가지 중요한 개념을 제시한다.

 

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

손님 입장에서 자신이 주문한 커피를 마실 수만 있다면 어떤 캐시어가 주문을 받는지 중요치 않다.

 

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

손님 입장에서 캐시어는 대체가능하다.(substitutable)

좀 더 정확히는 두명이 동일한 역할을 수행할 수 있다면 요청자 입장에서 어떤 사람이 역할을 수행하더라도 문제가 되지 않는다.

 

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

커피 제조를 요청받은 바리스타는 자신만의 독특한 방법으로 커피를 제조할 있다.

중요한 것은 커피를 제조하라는 동일한 요청을 받더라도 바리스타의 역할을 수행하는 사람들마다 서로 다른 방식으로 요청을 처리할 있다는 것이다.

이처럼 동일한 요청에 대해 서로 다른 방식으로 응답할 있는 능력을 다형성이라고 한다.

 

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

캐시어와 바리스타라는 개별적인 역할을 이용해 협력 관계를 묘사했지만

사람이 캐시어와 바리스타의 역할을 동시에 수행하는 것도 가능하다.

따라서 사람이 동시에 이상의 역할을 수행하는 것도 가능하다.

 

남자가 있다. 남자의 역할은 남편, 아이의 아버지, 직장인...

 

 

 

역할, 책임, 협력

기능을 구현하기 위해 협력하는 객체들

실세계의 커피를 주문하는 과정은 객체지향의 핵심적으로 중요한 개념을 거의 대부분 포함하고 있다.

 

사람을 객체로 , 에이전트의 요청을 메시지로, 에이전트가 요청을 처리하는 방법을 메서드로

바꾸면 대부분의 설명을 객체지향이라는 문맥으로 옮겨올 있다.

 

이제 커피 주문으로 알아본 역할, 책임, 협력의 개념을 객체지향 문맥으로 옮겨 보자

 

 

역할과 책임을 수행하며 협력하는 객체들

협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는

일상생활에서 목표는 사람들의 협력을 통해 달성되며, 목표는 작은 책임으로 분할되고 책임을 수행할 있는 적절한 역할을 가진 사람에 의해 수행된다.

협력에 참여하는 개인은 책임을 수행하기 위해 다른 사람에게 도움을 요청하기도 하며, 이를 통해 연쇄적인 요청과 응답으로 구성되는 협력 관계가 완성된다.

객체도 이런 인간 세계와 유사하다.

 

애플리케이션의 기능은 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 있는 객체에 의해 수행된다.

객체는 자신의 책임을 수행하는 도중 다른 객체에게 도움을 요청하기도 한다.

시스템은 역할과 책임을 수행하는 객체로 분할되고 시스템의 기능은 객체 간에 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.

 

객체지향 설계는 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다.

책임이 불분명한 객체는 애플리케이션의 미래 역시 불분명하게 만든다.

 

역할은 관련성 높은 책임의 집합이다.

 

역할은 유연하고 재사용 가능한 협력 관계를 구축하는데 중요한 설계 요소다.

대체 가능한 역할과 책임 객체지향 패러다임의 중요한 기반을 제공하는 다형성과도 깊이 연관돼있다.

 

 

+ Recent posts