티스토리 뷰
지난 HTTP 완벽 가이드 스터디에 이어 오브젝트 스터디를 마쳤습니다.
이번 포스팅에서는 오브젝트를 읽으며 배운 점과 느꼈던 부분을 회고로 풀어보겠습니다.
오브젝트 선정 이유
객체지향 원리와 이론들이 일상에서 내가 작성하는 코드와 어떤 관련이 있는지 의문을 가졌다면
이 책을 통해 많은 해답을 찾을 수 있을 것이다. - 이일민님 -
책을 오브젝트로 선정하며 달성하기로 했던 목표는 "객체지향에 대한 부족함을 채우기" 이였습니다.
객체지향 프로그래밍 언어인 자바를 사용하고, 자바를 더욱 객체지향스럽게 사용할 수 있는 스프링 프레임워크를 사용하며
중간중간 겪는 어려움과 에러는 객체지향의 개념을 이해하지 못했기 때문이라고 생각합니다.
정확하게는, 개념을 알지 못하는 것이 아닌 개념과 설계에 있어서의 갭을 이겨내지 못했던 것 같습니다.
위 오브젝트 추천사에 적혀있는 것처럼, 책을 통해 의문과 어려움을 해소할 수 있도록 하자라는 다짐으로 스터디를 진행하였습니다.
진행 방식
진행 방식은 이전 HTTP 스터디와 비슷했습니다.
정해진 스터디 날짜에 해당 챕터를 읽어 오고, 1시간 정도 진행하는 방식입니다.
오브젝트 책은 예제 코드를 객체지향스럽게 점진적으로 개선하는 내용으로 구성되어 있기 때문에,
개선하는 과정에서의 의문점이나 "개선 전 코드가 더 좋은 것 같은데?" 와 같은 생각을 공유하는 방식으로 스터디가 이어졌습니다.
또한, 개념적으로 알지 못했던 부분을 책을 통해 알게되어 이런 부분을 공유하는 방식으로도 진행되었습니다.
책을 읽으며
책을 읽으며 가장 크게 와닿았던 것은 "클래스가 아닌 객체를 바라봐야 한다" 라는 문장이었습니다.
그리고 "이 객체들을 단순 기능을 수행하기 위한 것이 아닌, 기능을 구현하기 위해 협력하는 공동체로 봐야한다" 였습니다.
객체지향이라는 개념을 알게 된 후, 저는 다음과 같이 코드를 객체지향적으로 작성하려 했습니다.
- 하나의 클래스는 하나의 역할(책임)을 가지도록 작성하자
- 확장은 손쉽게, 수정에는 보수적으로 다가가자
- 구현체가 아닌 인터페이스에 의존하는 코드를 작성하자
보통 SOLID 원칙을 지키려고 하는 코드 작성 방식이었던 것 같습니다.
구현하는 단계에서도 중요하지만, 오브젝트를 읽고 설계하는 시점에서 객체의 역할과 객체들 사이의 협력이 중요하며 이를 잘 설계하는 것이 가장 중요하다는 것을 알게되었습니다.
책에서는 데이터 중심의 설계에서 책임 중심의 설계로 전환하는 코드를 예시로 보여줍니다.
객체에서 데이터에 초점을 두는 것이 아닌, 행동(외부에게 제공하는)에 초점을 두는 설계입니다.
점차 우리가 생각하는 "잘 설계된 코드" 로 변경되는 과정을 보면서 "객체지향이란 이런 것" 을 느낄 수 있었습니다.
다만, 진행 중 어느 시점에 "이렇게까지 책임을 나누고, 잘게 쪼개야할까?" 라는 생각을 한 적이 있었습니다.
이 지점이 트레이드오프의 시점이 왔을 때라고 생각합니다. 그렇다면 이 트레이드오프를 현명하게 다루려면 어떻게 해야할 지 생각을 해봤는데, 정해진 것은 없고 관리하는 서비스에서 더 중요하다고 생각하는 것에 초점을 맞추어 설계하는 것이 맞다는 결론을 낼 수 있었습니다.
또한, 책 후반부에는 디자인 패턴에 대한 내용이 등장합니다.
망치를 들면 모든 것이 못으로 보인다는 격언처럼 패턴을 익힌 후에는, 모든 설계 문제를 패턴으로 해결하려고 시도하기 쉽다.
조슈아 케리에브스키는 이를 "패턴 만능주의"라고 부른다.
처음 디자인 패턴을 알게되었을 때, 기존 코드에서 이를 억지로 적용해보려 했던 경험이 있습니다.
다른 사람들이 많이 쓴다는, 좋다는 이유만으로 그 패턴을 적용하려 했던 것인데 책의 위 문구를 보며 과거의 실수를 떠올릴 수 있었습니다 ㅎㅎ,,
마무리 회고
이 책을 스터디를 통해 읽은 것은 혼자 읽는 것보다 제게 좋은 경험이었습니다.
혼자 읽었다면, "캬.. 이게 객체지향이지 취한다" 라고 생각하며 그냥 넘겼을 수도 있을 부분을 스터디 시간에 집어주는 스터디원들이 있었기 때문입니다.
처음에 읽을 때는 책 초반부에 설계된 코드들도 "좋은데?", "나쁘지 않은데?" 라고 생각하며 읽었었는데,
다시 초반부로 돌아가 읽어봤을 때는 어떤 부분이 어색한지를 알 수 있었고, 고쳐야 할 방향도 알 수 있었습니다.
책의 예제 코드에서 그치지 않고, 과거 작성했던 코드를 고쳐보면서 "변경에 유연하게 대응할 수 있는 코드"를 설계할 수 있도록 경험을 쌓도록 하겠습니다.