회고

'오브젝트 : 코드로 이해하는 객체지향 설계' 책을 읽고 난 후

죠니 : ) 2024. 11. 25. 19:16

안녕하세요 ! 오늘은 '오브젝트 : 코드로 이해하는 객체지향 설계'라는

책을 읽고 난 후 저의 생각과 읽는 과정에서 있었던 일에 대해서 얘기해보려고 합니다.

 

일단 이 책을 읽게 된 이유는 학교 동아리 스터디로 시작된거였어요

 

맨 처음에는 모두 한 챕터씩 읽고 각자 정리해와서 발표하는 형식(발표 1시간 + 토론 15분)으로 스터디를 진행했었어요.

그런데 중간에 회식을 한 번 가지고 기존까지의 스터디 방식을 변화하고픈 마음이 있어서 제가 의견을 제시하였습니다.

 

모두 한 챕터씩 읽고 와서 발표를 하는게 아니라 읽으면서 이해가 안되었던 부분이나 더 궁금한 부분에 대해서 토론하는 형식(토론 2시간)으로 바꾸자고 제안했습니다.

 

새로운 스터디 방식을 제안했던 이유로는 크게 2가지가 있었어요.

1. 정리하고 발표하는데 너무 많은 시간이 소요됨

2. 책의 내용에 대해서 서로의 의견을 공유하고 궁금증을 풀어내는 시간이 너무 적음

 

그리고 새로운 스터디 방식을 적용하고 더 좋아졌습니다.

(근데 약간 스터디 멤버들이 다 책을 제대로 읽어왔고 궁금증을 가지며 토론하는 것을 좋아하는 분위기여서 잘 진행이 되었던거 같아요!)


스터디를 하면서 느꼈던 점 🧐

(진짜 너무 많지만..)

 

1.  구체적이고 반복적인 예시의 활용

예제가 주로 자바로 작성되어 있어 자바에 대한 기초 지식이 없다면 다소 어렵게 느껴질 수 있습니다. 하지만, 각 코드가 어떻게 동작하는지에 대해 매우 상세히 설명하고 있어, 객체지향 설계 원리를 이해하는 데 큰 도움을 줍니다. 특히, 예제가 현실에서 실제로 활용될 만한 상황을 기반으로 구성되어 있어 추상적인 개념을 보다 구체적으로 이해할 수 있었습니다. 또한, 한 챕터마다 새로운 예시를 사용하는 대신, 동일한 예제를 3~4개의 챕터에 걸쳐 확장하고 발전시키며 설명합니다. 이를 통해 챕터 간 내용의 연결성을 높이고, 객체지향 설계의 핵심 개념을 깊이 있게 이해할 수 있다는 점이 인상적이었습니다.


2.
객체지향 개념에 대한 오해와 진실

제가 기존에 잘못 이해하고 있던 객체지향 개념을 바로잡을 수 있었습니다. 예를 들어, 저는 이전까지 코드의 재사용성을 높이기 위해 상속을 주로 활용했었습니다. 하지만 책에서는 상속은 코드의 재사용성보다 계층 구조 설계를 위해 사용되어야 하며, 상속을 과도하게 사용할 경우 캡슐화가 깨지고 클래스 간 의존성이 높아질 수 있다는 문제점을 명확히 설명합니다. 이를 통해 상속보다는 합성을 사용하는 것이 객체 간 결합도를 낮추고 유연한 설계를 가능하게 한다는 점을 깨달았습니다. 이처럼, 책은 제가 놓치고 있던 객체지향 설계의 본질을 체계적으로 이해할 수 있도록 도와주었습니다.

 

3. 디자인 패턴에 대한 깊이 있는 이해

작년에 디자인 패턴과 SOLID 원칙을 공부한다고 여러 블로그를 참고했던 기억이 떠오릅니다. 당시에는 디자인 패턴이 만들어진 맥락이나 그 개념에 대한 깊이 있는 이해 없이, 블로그에 정리된 내용만으로 이해하려고 했던 제 모습이 떠올라 부끄럽기도 했습니다. 하지만 이 책은 단순히 개념을 나열하지 않고, 하나의 예제를 시작으로 초기 코드의 문제점을 짚어내며 이를 해결하기 위해 어떻게 수정하고 개선해야 하는지 단계적으로 설명합니다. 덕분에 패턴이 만들어진 배경과 실제 적용 과정, 그리고 각 패턴의 목적과 의의를 명확히 이해할 수 있었습니다.

 

평소 책 읽는 것을 선호하지 않는 편임에도 불구하고, 책의 설명 방식이 워낙 체계적이고 설득력이 있어 끝까지 흥미롭게 읽을 수 있었습니다. 단순히 개념을 외우는 것이 아니라 문제 해결의 과정을 함께 체험하면서 자연스럽게 학습할 수 있다는 점이 특히 인상 깊었습니다.

 

4. 객체지향적으로 구조를 설계하는 방법을 배움

개발할 때 UI 설계는 손으로 간단히 그리거나, 기능 구현이 복잡한 경우 저만 이해할 수 있는 방식으로 구조도를 그렸었습니다. 하지만 이 책을 읽으며 객체지향 설계를 할 때 구조도를 체계적으로 그리는 방법과 그 중요성에 대해 깊이 깨달을 수 있었습니다. 단순히 기능적인 설계도뿐만 아니라, 클래스 다이어그램과 같은 객체 간 관계를 나타내는 다이어그램을 작성하는 것이 중요하다는 점을 알게 되었습니다.

 

특히, 클래스 다이어그램은 개발 전 해당 클래스의 역할과 책임을 명확히 정의하는 데 큰 도움을 줍니다. 이를 통해 클래스 간 의존성을 줄이고, 더 효율적이고 명확한 구조를 설계할 수 있었습니다. 책을 통해 이러한 설계의 중요성을 체감하게 되었으며, 앞으로는 설계 단계에서부터 다이어그램을 활용해 객체 간 책임과 역할을 명확히 정의하는 습관을 기르고자 합니다.

 

 

그래서 책을 읽고 나니 다시 클린아키텍처가 읽고 보고 싶어졌습니다.

근데 살짝? 고민인게 이제 막 디자인 패턴이 이해되기 시작해서 디자인 패턴에 대해서 더 알아볼지 고민됩니다.

 

암튼 많은 깨달음을 얻게 해주는 책이여서 만약 객체지향 설계에 대해서 관심이 있으신 분들이라면

완전 강추합니다. 👍🏻

 


다른 팀원들의 스터디 소감 🗣️

팀원 1:

- 필요한 서비스에 대해 구조를 짜고, 특히 그 구조 간 협력 방식을 결정하는 방법에 대해 깊이있게 배워서 좋았습니다.
- 안드로이드 개발을 하며 주로 쓰이는 아키텍쳐, 패턴 등에 대해 왜 그렇게 구성했는지 이해할 수 있고, 더 발전시킬 수 있는 능력이 생겼습니다.
- 좋은 책을 통해 배우는 것이 정말 많다고 느꼈습니다.
- 대면으로 소수의 인원과 책 내용에 대해 논의하는 과정이 다양한 방향으로의 성장을 야기함을 배웠고, 앞으로의 스터디에서도 활용하고 싶습니다.

 

팀원 2:

우리가 어떻게 개발을 해나가야될까를 고민해볼수 있는 좋은 스터디 였습니다. 
이 스터디를 통해 항상 막연하게 클래스를 쪼갤때면 이게 이렇게 쪼개는 맞는걸까? 이친구는 왜 이렇게 쪼갯지? 와 같이 개발할때 선택하게 될 사소한 결정들을 좋은 방향으로 판단할수 있는 기본 배경지식을 제공해준것 같습니다.
스터디전에는 모호했던 디자인패턴, solid 원칙과 같은 방법론들이 생겨난 이유, 필요한 이유 그리고 내가 이러한 원칙들을 왜 지키는게 좋을지 깊이 고민해볼수 있었고, 다른 분들과 토론하면서 다양한 관점으로도 고민해볼수 있었던것 같습니다.
실제로 조금은 빈약하지만 다른프로젝트에서 책임으로 객체를 분리하고 로직을 설계해보는 경험을 할때 스터디전에는 ‘이 객체가 이 데이터를 가지고 있네? 그럼 너 이거 데이터만 처리해’ 였다면 이제는 ‘너는 이 책임을 가질 객체니까 이행동을 하는데 이런 데이터를 가지도록해’ 로 조금은 객체를 대하는 방법이 달라진것 같습니다. 아직은 책의 내용을 100% 이해했다고 자신있게 말할순 없지만 앞으로 개발하며 고민할때 좋은 근거를 마련해주는 스터디였던것 같습니다. 추천 500개 드립니다~~!!