BOOKSEEK READING GUIDE
객체지향 설계 책 추천: 클래스 문법 다음에 배우는 책임과 협력
객체지향을 클래스 문법 다음 단계로 공부하려는 독자를 위한 책 비교입니다. 역할·책임·협력을 이해하는 개념서와 코드로 의존성·상속·합성을 살피는 설계서를 구분하고, 자신의 변경 요구에 맞춰 읽을 질문을 정리합니다.
클래스 문법 다음에 배우는 책임과 협력
클래스와 상속 문법을 배웠는데도 코드를 어떻게 나눌지 막막하다면 객체지향 설계의 질문을 따로 공부할 때입니다. 이 글은 같은 저자의 두 책을 개념 설명과 코드 설계라는 역할로 비교합니다. 『객체지향의 사실과 오해』에서 협력의 의미를 정리할 수도 있고, 이미 기본 개념을 안다면 『오브젝트』의 변경 예제부터 살펴볼 수도 있습니다.
책을 고르기 전에 이해할 핵심
객체지향의 개념을 이해하는 질문과 실제 코드를 설계하는 질문은 다릅니다. 역할·책임·협력의 언어가 코드의 관계로 이어지는 지점을 살펴봅니다.
객체가 맡을 일
데이터를 묶었다는 사실만으로 책임이 잘 나뉘었다고 말하기 어렵습니다. 사용자가 요청한 기능을 수행하려면 각 객체가 무엇을 알아야 하고 무엇을 해야 하는지 적어 보세요. 클래스 수보다 책임을 배분한 이유가 중요한 비교 기준입니다.
인터페이스와 내부 구현
다른 객체가 요청할 수 있는 일과 그 일을 처리하는 내부 방법을 분리합니다. 어떤 데이터를 숨길지뿐 아니라 어떤 요청을 공개할지 함께 생각해야 합니다. 구현을 바꿔도 호출하는 쪽의 기대가 유지되는지 질문해 보세요.
변경에 필요한 연결
의존성은 협력을 가능하게 하므로 모두 제거할 수 없습니다. 어떤 변경이 예상되며 그때 어느 부분이 함께 바뀌는지 살피는 것이 설계의 출발점입니다. 상속과 합성도 같은 기준으로 비교하고 추상화가 늘어나는 비용을 함께 생각합니다.
객체지향을 바라보는 관점부터 정리하기
설계 선택을 코드의 변경으로 확인하기
『오브젝트』는 객체지향 개념이 실제 코드에서 어떤 선택으로 나타나는지 살펴보는 설계서입니다. 책임을 배분하는 방법과 의존성 관리, 상속과 합성의 구분을 코드 예제와 연결합니다. 언어의 클래스 문법은 알고 있지만 변경 요청이 올 때마다 여러 곳을 고치게 되는 이유가 궁금한 독자에게 맞습니다.
『오브젝트』는 책임을 배분한 결과를 코드로 확인하고 싶은 독자에게 선정했습니다. 응집도와 결합도, 상속과 합성을 이야기할 때 같은 기능이 어떻게 다른 구조로 구현되는지 비교할 수 있습니다. 예제를 읽으며 다음 요구가 추가되면 어느 부분을 고칠지 먼저 예측해 보세요.
좋은 설계의 모양을 복제하기보다는 그 구조를 택한 조건을 살피는 편이 중요합니다. 코드의 추상화가 늘었을 때 얻는 유연성과 읽는 부담을 함께 적어 보면 자기 프로젝트에 적용할 근거가 남습니다.
어떤 책부터 펼칠까요?
개념의 뜻이 흔들린다면 첫 책에서 역할·책임·메시지를 정리하고, 설계 변경의 대가를 보고 싶다면 『오브젝트』를 선택하세요. 두 권을 무조건 순서대로 완독해야 하는 것은 아닙니다.
읽은 뒤에는 하나의 기능에 대해 객체별 책임을 적고, 변경 요청 하나를 가정해 수정 범위를 예측해 보세요. 예측이 어려웠던 연결이 다음에 검토할 설계 지점입니다. 특정 원칙을 적용했다는 사실보다 왜 그 문제에서 도움이 되는지 설명하는 것이 학습 목표입니다.
『객체지향의 사실과 오해』는 클래스를 만들 줄 알지만 객체지향적으로 생각한다는 말이 여전히 추상적인 독자에게 맞는 책입니다. 조영호는 객체의 상태와 행동, 역할과 책임, 메시지와 협력을 중심으로 설계의 관점을 설명합니다. 프로그래밍 언어의 문법을 배우기 위한 교재와는 읽는 목적이 다릅니다.
이 책을 고른 이유는 특정 언어의 기능 설명에서 벗어나 상태와 행동, 메시지와 책임의 관계를 다시 생각할 수 있기 때문입니다. 이미 알고 있다고 여긴 용어를 작은 기능 하나에 적용해 설명해 보세요. 실제 클래스의 이름을 쓰기 전에 객체들이 주고받는 요청부터 적어 보면 관점의 차이가 드러납니다.
프레임워크 프로젝트를 완성하는 책을 찾는 독자에게는 맞지 않습니다. 2015년의 도구 환경을 배우는 대신 개념을 정리하는 목적으로 선택합니다.