📌 목차
1장: 협력하는 객체들의 공동체
2장: 이상한 나라의 객체
3장: 타입과 추상화
4장: 역할, 책임, 협력
5장: 책임과 메시지
6장: 객체 지도
7장: 함께 모으기
부록: 추상화 기법
객체는 '상태'보다 '행동'이다
책을 읽으면서 많이 나오는 말 중에 하나다.
행동이 상태를 결정한다.
객체의 상태가 먼저가 아니라, 어떤 행동이 필요한지를 먼저 결정하고, 그 행동을 수행하기 위해 필요한 상태를 정의하는 게 객체지향이다.
객체가 상태의 일부로 데이터를 포함하는 것은 사실이지만 데이터는 단지 객체가 행위를 수행하는 데 필요한 재료일 뿐이다.
예전에는 설계할 때 상태(필드)부터 정의해 놓고 거기에 맞춰 메서드를 짰다.
하지만 지금은 협력을 위한 행동부터 고민하고, 그 행동을 수행하기 위해 필요한 상태가 뭐지?를 고려한다.
완전히 관점이 바뀌었다.
메시지와 책임, 그리고 다형성
객체지향 설계에서 핵심은 어떤 객체가 어떤 메시지를 수신하고, 어떤 방식으로 응답하느냐다.
- 메시지를 먼저 정의하고
- 그 메시지를 수신할 수 있는 객체를 정하며
- 메시지를 처리하는 방식은 객체 스스로가 결정한다
이 구조 덕분에 메시지를 수신할 수만 있다면, 어떤 객체든 협력 대상이 될 수 있다.
이게 바로 다형성의 본질이다. (객상추다 객상추다!) 😂
"동일한 메시지를 받고 다른 방식으로 응답할 수 있는 능력"
이것이 다형성이고, 객체지향의 유연함과 확장성을 만드는 핵심이다.
역할, 책임, 협력
책 전반에서 계속 강조되는 개념이 바로 이 세 가지였다.(정말 질리도록 강조한다)
특히 '04장 역할, 책임, 협력과 05장 책임과 메시지' 이 두 장이 제일 핵심이라고 생각한다.
객체 하나하나에 어떤 책임을 줄 것인가가 아니라,
먼저 시스템에 필요한 협력을 생각하고,
그 협력을 위해 필요한 역할을 정의하고,
그 역할이 수행해야 할 책임을 정하는 흐름이 설계의 중심이다.
협력 안에 요청과 응답에 초점을 맞춰 보자.
누군가 왕에게 재판을 해달라는 요청을 보냈다는 말은, 왕이 재판을 수행할 의무가 있으며, 재판에 필요한 지식을 가지고 있음을 의미한다.
결국 어떤 등장인물들이 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식과 행동 방식을 가지고 있기 때문이다.
그리고 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.
캡슐화는 데이터를 숨기는 게 아니라 '구현'을 감추는 것
이전까지는 캡슐화라고 하면 getter/setter로 멤버 변수에 직접 접근하지 못하게 만드는 정도로 이해했었다.
하지만 이 책은 그것보다 훨씬 본질적인 내용을 다룬다.
“객체는 무엇을 할 수 있는가(What)”만 드러내고,
“어떻게 수행하는가(How)”는 감춰야 한다.
메시지를 통해 협력에는 참여할 수 있어야 하지만,
그 내부 구현 방식은 외부에 영향을 주지 않아야 객체가 자율성을 유지할 수 있고 변경이 외부로 전파되지 않는다.
클래스를 설계하기 전에 메시지를 먼저 설계하라
책 후반에 나오는 "What/Who 사이클"도 기억에 남는다.
먼저 무엇(What)을 할 것인지를 결정하고,
그다음 누가(Who) 그것을 수행할지를 선택하라.
객체를 설계할 때 무조건 클래스를 먼저 떠올리던 방식에서 벗어나,
“어떤 메시지가 오갈 것인가?” → “이 메시지를 누가 담당해야 하는가?”
라는 흐름으로 접근해야 한다.
요약하며
내가 이 책을 통해 가장 크게 배운 것을 정리해 보자면 다음 세 가지다.
- 객체는 협력의 주체다.
객체는 단독으로 존재하지 않으며, 협력 안에서 책임을 수행한다. - 행동이 상태를 결정한다.
상태가 아니라 협력에 필요한 행동을 중심으로 객체를 구성해야 한다. - 설계는 클래스가 아니라 메시지로 시작한다.
어떤 메시지가 오가는지부터 설계하고, 그 메시지를 수행할 객체를 찾아야 한다.
책에서는 다양한 실세계의 사례를 예시로 들어 설명한다.
솔직히 말하면 앨리스는 크게 와닿지 않았다.
물론 이해는 됐지만, '재판 과정'이나 '커피 주문'처럼 좀 더 실제 상황에 가까운 예시가 훨씬 이해하기 쉽다고 느꼈다.
6장부터는 내용이 조금씩 어려워졌고 한 번에 이해되지 않는 부분도 많아서,
"뭔 말이지?", "?"하고 메모를 달아놨던 부분이 많았다 ㅋㅋ(예를 들면 멘탈 모델이라던지)
7장은 사실 6장까지 읽으면서도 정말 좋은 책이라고 느꼈지만,
마지막 장을 딱 읽고 나서야 클라이맥스에 다다라 유종의 미를 거둔 느낌이었다.
6장까지 이론적인 이해를 완전히 했다면,
7장에서는 이때까지 이해한 걸 바탕으로 실제 도메인 설계를 탑다운으로 방식으로 설명해 완벽하게 이해시켜 준다.
NextStep으로 객체지향 코드에 꽤 익숙해져 있었고, 이론도 많이 공부했기 때문에
글이 정말 잘 읽혔고 왜 이 책이 "객체지향의 바이블"인지 이해할 수 있었다.
정말 좋았던 책이다!! 땅땅!
👀 추천하고 싶은 사람
- 객체지향을 추상적으로만 이해하고 있는 사람
- 개구리책을 읽고 나서, 객체지향을 더 깊게 이해하고 싶은 사람
- 도메인 설계가 어려운 사람
" 객체지향의 핵심은 클래스를 어떻게 구현할 것인가가 아니라,
객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다. "
'📝 끄적끄적 > 후기 및 회고' 카테고리의 다른 글
8주간의 개발자 스터디를 운영하며 (3) | 2025.08.03 |
---|---|
'면접을 위한 CS 전공지식 노트'를 읽고 (0) | 2025.07.05 |
`2025 스프링 캠프(Spring Camp)`참여 후기 (2) | 2025.06.30 |
'JSP 2.3 웹 프로그래밍: 기초부터 중급까지'를 읽고 (0) | 2025.04.08 |
'자바의신1&2(3판)'를 읽고 (0) | 2024.12.07 |
2023년 회고 (0) | 2024.01.03 |