🧐 객체지향?
책을 읽기 전에 먼저 내가 아는 객체지향이란 어떤 것일지 생각해 봤다.
내가 생각하는 객체지향은 "나중에 추가될 요구사항에 유연하게 프로그래밍을 할 수 있게 하는 것"이라고 생각했다.
글을 적어 내려가면서 떠오르는 생각은 단순히 다형성에만 초점이 잡혀있는 것 같다.
책에서 가장 먼저 객체지향이 가지는 오해에 대해서 언급한다.
객체지향의 목표는 무엇일까? 일반적으로 실세계를 모방하는 것이라고 많이 알고 있다.
하지만, 요구사항을 만족하는 새로운 세계를 만드는 것이 객체지향의 목표이다.
그렇다면 왜 실세계를 모방하는 것으로 우리는 많이 알고 있을까?
우리는 객체지향을 이해하는 데 있어서 실세계를 예로 드는 것이 이해하기 쉽기 때문이다.
단순히 이해하는데 쉬울 뿐 구현하고 설계하는 기엔 부적합하다.
🔄️ 협력하는 사람들
책의 예시에는 커피를 주문하는 사람과, 주문을 받는 사람 그리고 만드는 사람이 등장한다.
이 예시를 통해서 역할, 책임, 협력 3가지에 대해서 이야기한다.
기존에 알고 있던 역할과 책임의 경계는 희미해서 한번 짚고 넘어가겠다.
- 책임 : 객체가 행해야 하는 특정한 작업이나 행위를 의미한다.
- 역할 : 책임을 내포하는 개념이다. 상황과 요구사항에 따라 부여되는 하나의 페르소나이다.
이전에는 어떤 역할에 하나의 책임만을 무조건적으로 부여하려고 했다.
SRP 원칙 때문에 그랬다기보단 역할과 책임을 동등하게 봐서 차이를 구분하지 못했던 것이다.
점원이라는 역할에 주문을 받는 책임과 가게를 정리하는 책임이 동시에 존재할 수 있다는 점을 간과한 것이다.
객체지향 세계를 설계함에 있어 가장 중요한 것은 책임을 적절하게 나누는 것이다.
객체의 역할은 다음과 같은 특징을 가진다.
- 여러 객체가 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 각 객체가 책임을 수행하는 방법은 자율적이다.
- 하나의 객체가 여러 역할을 할 수 있다.
🤗 협력 속에 사는 객체
객체 혼자서 애플리케이션을 동작시키기에는 무리이므로 다양한 객체 간의 협력은 필수이다.
협력을 하기 위해서는 객체는 2가지 덕목을 가져야 한다.
- 충분히 협력적 : 다른 객체의 요청에 응한다. 하지만 무조건적으로 응답하지 않는다.
- 자율적 : 스스로의 기준으로 행동한다.
객체의 자율성을 보장해 주기 위해서 가장 먼저 내부와 외부를 구분해야 한다.
그리고 스스로 판단할 수 있는 기준을 객체가 가지고 있어야 한다.
따라서 객체가 상태와 행동을 가지게 됨으로 자율적으로 협력할 수 있게 되는 것이다.
이전에는 엄격하게 분리되던 데이터와 프로세스를 객체지향에서는 같이 부여해 주었다.
그 결과로, 유지보수가 쉬워지고 재사용이 더 용이해졌다.
😎 객체지향의 본질
객체지향의 오해와 사실이란 책 제목답게 우리가 가진 오해에 대해서 이야기한다.
그 오해는 바로 "클래스"로, 단순히 객체를 표현하는 설계도라는 사실을 짚어준다.
지금까지 이야기한 핵심을 정리하면 다음과 같다.
- 객체지향이란 시스템을 자율적인 객체들의 공동체로 바라보고 시스템을 분할하는 방법이다.
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 책임지는 객체이다.
- 애플리케이션을 동작하기 위해 객체는 서로 협력한다. 그리고 부여된 역할을 수행하며 책임을 다한다.
- 메시지를 통해서 협력을 요청하고, 메시지를 받은 객체는 스스로 수행할 메서드를 선택한다.
객체가 서로 어떤 메시지를 주고받을지와 어떤 책임과 역할을 부여할 것인지에 집중해야 한다.
클래스란 단순한 도구라는 사실을 잊지 말자!
😋 지극히 개인적인 블로그지만 훈수와 조언은 제 성장에 도움이 됩니다 😋
'개인 공부 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 4장 : 역할, 책임, 협력 (0) | 2023.06.19 |
---|---|
[객체지향의 사실과 오해] 2장 : 이상한 나라의 객체 (0) | 2023.06.04 |
댓글