객체지향의 사실과 오해 독서노트 2장
by luis lee
2장 이상한 나라의 객체
객체지향의 본질이란?
이 책에서 이야기하길,
- 객체지향이란 자율적인 객체들의 공동체를 바라보고 객체를 이용해 시스템을 분할하는 방법이라고한다.
- 여기서 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메세지를 전송하고, 메세지를 수신한 객체는 메세지를 처리하는 메서드를 자율적으로 선택한다.
라고 언급했다.
또한 객체지향 언어를 바라볼때 Class 가 객체지향 그 자체라고 하는 것은 위험한 생각이라고 했고 이에 동의한다.
그리고 객체지향이 현실을 모방하는 것이라고 하는것은 힘들며 현실을 은유하고 현실의 객체를 의인화한다고 언급했다. 즉, 객체지향은 현실에서 비슷한 일을 하는 객체에 대해서 이 객체가 현실에서 은유하고 있는 기능을 객체로 구현하며, 현실에서의 객체가 수동적이라면 프로그래밍에서의 객체는 능동적이고 스스로 의인화된 모습을 보인다는 것이다.
2장에서 가장 와닿았던 부분은 다음과 같다.
- 행동이 상태를 결정한다!!!!
당연하 이야기로 들릴 수 있겠다. 하지만 코드상에서 객체지향을 잘못 이해하고 있었던 나로서는 큰 깨달음을 얻은 부분이다. 기존에 Class 를 구현하여 객체지향을 바라보던 시각에서는 내가 구현하고자하는 객체의 상태를 먼저 생각했다. 예를들어 학생이라는 객체를 만들고자한다면, 학생이 가질만한 성질이나 상태를 먼저 생각했었다. 하지만 이는 객체지향이라고 할 수 없다.
상태를 먼저 결정하게되면
- 캡슐화가 저해된다. 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되버릴 확률이 높아진다.
- 객체를 고립된 섬으로 만들어버린다. 객체는 다른 객체외 협력하기위해서 필요한데, 불행히 상태를 먼저 고려하면 협력이라는 문맥에서 벗어나버린다.
- 객체의 재사용성이 저하된다. 재사용성은 협력에 참여할수있는 능력에서 나오는데, 상태를 먼저 결정해버리면 협력이 저하된다.
따라서 중요한건 원하는 행동을 먼저 결정하고, 행동에 따라 상태가 결정되는 것이다.
즉, 내가 학생이라는 객체를 생각했다면 학생이 해야하는 행동, 선생님과는 어떤 협력을 해야하는지, 학교와는 어떤 협력을 하는지, 등… 학생의 행동을 먼저 결정했어야한다.
그 후에야 비로소 이런 행동에 필요한 상태를 결정하게 되는 것이다. 그리고 주의할 점은 협력 안에서 객체의 행동은 결국 자신의 행동에 책임을 져야한다. 이를 RDD(책임 주도 설계) 라고 한다.
따라서 이번장에서 최대의 수확은
“행동을 먼저 결정하고 그 후에 필요한 상태를 결정하자”
라고 할 수 있다.
Subscribe via RSS