지금까지 프로젝트를 진행해오면서 관련 개념과 지식이 부족하다고 많이 느끼게되었다. 관련 서적을 읽어가며 되돌아보는 시간을 갖기로 했다.
그 첫번째로는 객체지향의 사실과 오해 를 읽고 정리해보고자 한다.
1장
협력하는 객체들 (e.g 커피와 바리스타)
우리가 실생활에서 커피를 마식 위해 커피전문점을 방문하여 커피를 주문하는 과정을 살펴보자.
우선 커피를 주문(Req)을 캐시어에게 하고 캐시어는 이 주문을 다시 바리스타에게 요청하여 바리스타가 커피를 만들고 캐시어에게 전달이후 다시 캐시어가 주문자에게 전달하며 커피를 받는다.
이때 손님이 캐시어에게 또는 캐시어가 바리스타에게 요청을 보내는것을 Request라하고 그 Request에 응답하는것을 Response라 한다. (영문 단어뜻 그대로임)
이러한 요청과 응답을 통해 다른사람과 협력할 수있다.
각각의 사람들은 (손님, 캐시어, 바리스타) 각자의 역할을 한다. 손님은 주문을하고 캐시어는 주문을 받고 바리스타는 커피를 만들고, 이러한 역할을 받은 사람들은 그 행위를 처리할 책임이 있다. 이러한 실생활에서의 역할과 책임 그리고 협력이 객체지향에서 가장 중요한 개념이다.
여기서 좀더 깊게 생각한다면, 캐시어와 바리스타는 다른 사람으로 대체 할수있다. 즉 여러사람이 동일한 역할을 수행할수 있다는 점이다. 이러한 점에서 역할은 대체 가능성을 의미한다. 책임을 수행하는 방법은 자율적으로 선택할 수 있다. 예를들어 같은 커피를 주문을 받았더라도 만드는사람마다 컵에 얼음을 먼저 넣는지 물을 먼저 넣는지 에스프레소를 먼저 넣는지 다른 방법으로 요청을 처리할수 있는 능력을 다형성이라고 한다.
또한 한사람이 동시에 여러 역할을 수행할 수 있다. 작은 동내 가게를 생각해보면 한명의 알바생이 주문도 받고 커피도 내리는 역할을 수행하는것을 생각하면된다. 이러한 것은 각자 누군가의 동생이고, 누군가에겐 연인, 누군가에겐 동내 친구, 어디서는 학생이고 어디서는 개발자라는 역할을 하고있다.
예시가 너무 길었지만 이를 객체에 대입하자면,
- 여러 객체가 동일한 역할을 할수있다
- 역할은 대체가 가능성을 의미한다.
- 각 객체는 책임을 수행하는 방법을 자율적으로 선택할수 있다.
- 하나의 객체가 동시에 여러 역할을 수행할수 있다.
이점을 잘 기억해둬야한다. 이는 역할은 유연하고 재사용 가능한 협력 관계를 구축하는데 중요한 설계 요소다. 이 역할과 책임은 객체지향 패러다임의 중요한 기반을 제공하는 다형성과 깊이 연관되어있다.
협력속에 사는 객체
객체 지향 애플리케이션의 윤곽을 결정하는 것은 역할, 책임, 협력이지만 실제 협력에 참여하는 주체는 객체이다. 애플리케시이션 안에서 쉴새없이 메세지를 주고받으며 협력하는 객체는 협력 공동체의 일원으로 두가지의 덕목을 갖추고 이 두가지의 덕목사이에서 균형을 유지해야한다.
우선 객체즌 협력적이어야한다. 즉 다른 객체에게 적극적으로 도움을 요청할 정도의 열린 마음을 가져야한다. 외부 도움을 무시한채 모든것을 스스로 처리하는 god object는 결국 자멸하게된다. 실생활에서도 그렇다.사회에서 혼자 할수있는 일은 없기 때문이다.
하지만 협력적이라는 말은 명령에 따라 행동하는 수동적인 존재를 의미하는것이아니라 요청이 오면 응답을 하라는것이다 하지만 어떤 방식으로 응답할지는 객체가 판단하고 결정한다 또한 요청에 답할지도 객체가 스스로 결정해야한다.( 질문에 답을 하는방식은 사람마다 다르고 무응답도 답이다)
여기서 객체는 두번째 덕목을 알수있다. 객체는 자율적이어야한다는것이다. 즉 본인의 원칙에 따라 스스로를 통제하여 절제하는것을 의미한다. 자율적이라고 해서 지멋대로 하면안된다.
상태와 행동을 함께 지닌 자율적인 객체
객체를 흔히 상태와 행동을 함께 지닌 실체 라 정의를 하는데, 풀어 설명하자면 객체가 협력에 참여하기 위해 행동(행위)를 한다면 그 행동을 하는데 필요한 상태도 함께 지니고 있어야한다는 점이다. 예를 들어 커피를 제조하는 바리스타가 제조방법을 모른다 하면 말이 안되는것 처럼, 행동을 하기위해 필요한 상태를 알지 못한다는 것이 역시 말이 되지 않는다.
객체의 자율성은 객체의 내부와 외부를 구분하는것부터 시작이다. 객체의 사적인 부분은 객체 스스로 외부에서 간섭하지 못하도록 차단해야하며 외부에서는 접근이 허락된 수단을 통해 객체와 소통해야한다. 알 수 없다. 즉 캐시어가 바리스타가 커피를 만드는것을 알고있지만 어떤 방식으로 만들지 알필요 없고 또한 관여할 필요가 없듯이 객체는 다른 객체가 무엇을 수행하는지 알수 있지만 어떻게 수행하는지 알 수 없는 것이다.
협력과 메세지
사람들은 원활한 협력을 가능케 하는 다양한 메커니즘을 통해 의사소통을 할 수 있다. (대화라던지 혹은 글로 남긴다는지 등등)
이러한 메커니즘을 이용해 요청을하고 응답할 수 있는 사람들과 달리 객체지향의 세계에서는 하나의 의사소통 수단으로만 소통한다. 이는 메세지라 한다. 한 객체가 다른 객체에 요청하는것을 메세지를 전송한다 하고 이 요청을 받는것을 수신이라 한다. 이러한 객체들을 sender와 receiver라 부른다.
메서드와 자율성
객체는 다른 객체와 협력하기 위해 메세지를 전송하고 이 메세지를 받은 수신자는 어떻게 응답할지 고민하고 자신만의 방식으로 처리를한다 이 처리 방법을 메서드라 부른다. 객체 지향 프로그래밍 언어에서 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현된다. 따라서 어떤 객체에서 메세지를 전송하면 대응되는 특정 메서드가 실행된다. 이렇게 메세지를 수신한 객체가 실행 시간에 메서드를 선택할수 있다는 점이 다른 언어와 객체지향 프로그래밍 언어를 구분 짓는 핵심적인 특징이다.
메세지와 메서드의 분리는 객체의 협력에 참여하는 객체들 간의 자율성을 증진시킨다. 외부의 요청이 무엇인지를 표현하는 메세지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는것은 객체의 자율성을 높이는 핵심 메커니즘이다. 이것은 캡슐화라는 개념과 관련이 있다.
결론
객체지향이란? 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분리하는 방법
여기서 자율적인객체란 상태와 행위를 함께 지니며 스스로 자기자신의 책임지는 객체를 의미함
객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력하고 각 객체는 협력 내에서 정해진 역할을 수행하며, 역할은 관련된 책임의 집합이다.
객체는 다른 객체와 협력하기 위해 메세지를 전송하고, 이 메세지를 수신한 객체는 처리하기 적합한 메서드를 자율적으로 선택한다.
'도서 > 객체지향의 사실과 오해' 카테고리의 다른 글
객체지향의 사실과 오해 3장 요약 (0) | 2025.06.16 |
---|---|
객체지향의 사실과 오해 2장 요약 (0) | 2025.06.15 |