조영호, <객체지향의 사실과 오해:역할, 책임, 협력 관점에서 본 객체지향>

MinHwi·2022년 11월 24일
0

서평

목록 보기
1/1

  • 읽은 기간 : 2022년 11월 8일 ~ 2022년 11월 24일
  • 한줄평 : 이 책으로 객체지향 세계에 입문했어요

최근 1년간 자바를 많이 사용했다. 객체지향 언어를 사용한다는 것이 객체지향적인 프로그래밍을 하고 있다는 것은 아니라는 말은 많이 들었다. 이 책을 읽고 나서 이 말에 대해 공감할 수 있게 되었다.

나는 자바 공부를 하면서 어떻게 하면 클래스를 잘 설계해서 변경에 취약하지 않은 구조를 만들 수 있는지 고민했다. 클래스의 관점에서 상속, 다형성, 캡슐화 등의 컨셉을 받아들이려고 했다. 코드로는 많이 접해서 익숙해지는 시도를 했으나, 개념적으로는 명쾌한 이해가 어려웠다. 원리를 머리가 받아들이지 못하니 선뜻 코드를 작성할 수 없었다.

이 책을 통해 클래스는 객체를 추상화하기 위한 도구하는 확실한 컨셉을 얻었다. 자바를 사용할 때 클래스를 잘 설계하는 것은 중요하다. 내가 작성한 클래스로부터 객체를 만들어내기 때문이다. 이제는 클래스 설계가 중요한 이유를 객체의 관점에서 보게 되었다. 내가 소프트웨어로 구현하고자 하는 세상을 이루는 것이 객체고, 객체를 분류하기 위한 도구가 클래스이다. 자바는 객체의 분류 도구를 제공하는 것이다.

책에서 반복적으로 설명하는 것이 있다. 바로 협력과 메시지이다. 협력은 우리가 달성하려는 목표이다. 큰 책임을 가진 협력을 달성하기 위해 작은 책임을 가진 여러 객체가 협력에 참여한다. 이때 객체가 다른 객체와 상호작용할 수 있는 유일한 수단은 메시지이다. 객체는 독립적이고 자율적인 책임을 가지기 때문에 다른 객체의 상태를 변화시킬 수 있는 권한이 없다. 이렇게 책을 안 보고도 줄줄 쓰는 것을 보니 책에서 정말 반복을 많이 한 것 같다.

객체가 자율적이어야 시스템 전체의 이해가 쉬워지고 변경도 쉽게 수용한다. 수정으로 인한 파급 효과가 줄어들기 때문이다. 객체는 메시지로 소통한다. 메시지라는 존재 덕분에 객체가 외부와 내부로 철저하게 나뉘어져 변경 사항을 감출 수 있다. 또 같은 메시지를 수신할 수 있다면 협력에 참여하는 객체를 바꿀 수 있다. 같은 책임을 가지면서 더 구체적인 타입을 가지면 이는 서브 클래스이다.

어쨌든 내가 이 책을 읽고 얻은 인사이트는 세상을 객체로 보는 것이다. 나는 요구 사항을 보고 타입부터 설계를 했었다. 이제는 우선 이 협력을 달성하기 위해 어떤 객체가 어떤 책임을 가져야할지부터 고민할 것이다.

마지막 장에 도메인 모델을 만들고, 유스 케이스로 기능을 작성하고, 큰 협력을 객체에게 분배하여 협력 관계를 구성하고, 인터페이스와 내부를 구현하는 과정을 보았다. 책에서는 아주 간단한 예제로 표현을 했는데, 이 방법을 적용하여 설계하는 과정이 궁금해졌다. 왜냐하면 클린 코드 과제할 때 설계로 써먹어보고 싶기 때문이다. 이 책에서 많이 등장했던 <책임 주도 설계>을 볼까 같은 분이 쓰신 <오브젝트>를 볼까 고민했는데, 일단 도서관에서 구할 수 있는 <오브젝트>부터 볼까 한다.

개인적으로 OOP는 정말 매력적인 패러다임인 것 같다. 기능을 구조에 종속시키는 접근 방법이 마음에 든다. 복잡한 세계를 추상화하여 바라보는 것도.

profile
딩가딩가 백엔드 개발자

0개의 댓글