객체지향을 쉽게 설명하기 위해 이 책에선 커피가게에 비유하였다.
이를 나의 방식으로 바꿔서 내가 이해한 것을 바탕으로 재구성하였다.
- 나는 코딩을 하다 모르는 문제에 막혀 이를 해결하기 위해 친구에게 물어봤다.
- 친구는 잠시 고민을 하다가 인터넷에 검색하여 좋은 소스코드를 보고 나에게 공유하였다.
- 그 소스코드를 이용하여 문제를 해결하였다.
나와 친구사이의 요청이 있었고
친구는 이를 해결하기 위해 인터넷과의 요청이 있었다.
나 -> 친구 -> 인터넷
또한 이 요청에 응답은 요청의 반대방향으로 연쇄적으로 전달된다.
인터넷은 좋은 소스코드라는 응답을 친구에게 해주었고
친구는 이 소스코드를 나에게 전달해주는 응답을 했다.
나 <- 친구 <- 인터넷
역할은 다양한 책임의 집합으로 표현한다.
특정한 역할은 특정한 책임을 암시한다.
예를 들면, 경찰이라는 역할은 도둑을 잡아야하는 책임을 지니고, 의사는 사람의 병을 치료해야하는 책임을 내포하고 있다.
객체지향과 우리 사는 사회의 공통적인 중요한 개념이 몇가지 있다.
객체지향의 윤곽은 역할, 책임, 협력으로 이루어져있다.
애플리케이션의 기능은 작은 책임들로 분할되고
이 책임은 적절히 역할을 수행할 수 있는 객체에 의해 수행된다.
이 때 객체가 자신의 책임을 수행하는 도중 다른 객체에 도움을 요청하기도 한다.
사람 -> 객체
요청 -> 메시지
요청을 처리하는 방법 -> 메서드
위와 같이 단어를 변경하면 객체지향을 설명하는 개념이 된다.
객체지향의 설계는 적절한 객체에게 적절한 책임을 할당하는 것부터 시작이다.
여기서 책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소이다.
좋은 객체의 조건으로 두가지가 있다
우선 객체가 협력적이면 다른 객체의 요청에 충실하고 또한 다른 객체에 요청할 것을 두려워해선 안된다.
또한 객체는 다른 객체의 명령을 수행하는 것이 아닌 요청에 응답하는 것이다.
어떤 방법으로 응답하는 지에 대한 것은 객체 스스로 판단하고 결정한다.
흔히 객체는 상태(state)와 행동(behavior)을 함께 지닌 실체로 정의한다.
객체가 협력에 참여하는 과정에서 스스로 판단하고 결정하는 자율적인 존재로 남기위해선 필요한 행동과 상태를 함께 지니고 있어야 하기 때문이다.
객체의 내부와 외부를 명확하게 구분하는 것으로 부터 나온다.
객체는 다른 객체가 무엇을 수행하는지 알수 있지만,
어떻게 수행하는지에 대해선 알수 없다.
객체지향에서의 한가지 의사소통 수단
전송: 객체가 메시지를 보내는것
송신자: 메시지를 전송하는 객체
수신: 객체가 다른 객체로부터 메시지를 받는 것
수신자: 메시지를 수신하는 객체
메서드: 객체가 수신된 메시지를 처리하는 방법
'친구'는 '인터넷'에 좋은 소스코드를 찾음으로써 요청에 응답할 수 있었지만,
전공 서적에서 답안을 찾는 것도 가능하다.
여기서 각각의 선택지가 메서드라 할 수 있다.
'친구'는 스스로 고민하여 '인터넷'이라는 메서드를 택하였고,
이를 선택하는것은 '친구'라는 객체의 자유이다.
외부의 요청이 무엇인지 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.
흔히 객체지향하면 클래스를 얘기하지만 클래스보단 객체를 더 중요하게 보자
중요한 건 어떤 클래스가 필요한게 아닌 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는가이다.
핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다.