수정하기 너무나 힘든 코드를 작성하거나 유지보수하는 개발자들의 필독서
서론 : 객체지향 몰라도 코드를 작성할 수 있다
요구사항은 변한다. 그 요구사항을 반영하는 것이 사실 크게 어렵지 않은 순간이 많다. 그냥 대충 DB에 컬럼 추가하고 쿼리 추가하고 맵(Map)에다 넣어서 if else 블록 추가하면 된다. 예전에 비슷한 수정사항이 있었으면 그거 복붙하면 된다. 그런데 계속 그렇게 작업하다가 보면 언젠가 엄청나게 긴 메서드와 객체를 만나게 된다. 쿼리도 엄청 복잡해진다. 뭐 하나 수정하기가 너무 여러운 코드가 된다.
그런 코드는 개발자의 적이다. 읽는데 너무 힘들다. 경험상 그런 코드는 재작성하게 되는데 숨겨진 로직을 반영하지 못해서 버그가 생길 때도 많다. (그것 때문에 또 스트레스...) 지나친 비약일지도 모르지만 결국은 코드 때문에 스트레스 받게되고 코드 때문에 야근을 하게 된다.
결국 우리는 읽기 좋고 수정하기 좋은 코드를 작성해야한다. 그래야 개발자가 행복하다. 객체지향과 디자인 패턴은 그런 코드를 작성하기 위한 방법 중의 하나이다. 우리의 삶을 위해서 이런 류의 책을 한번 쯤은 읽어봐야한다고 생각한다.
추천 독자
이 책의 대상 독자는 서문에 잘 정리되어 있다. 첨언을 하자면 객체지향 언어로 일을 하는데 뭔가 수정하기 너무 어렵고 힘든 경험이 있는 사람이라면 도움이 많이 될 것 같다. 그 코드가 백앤드 코드이던 클라이언트 코드이던 중요하지는 않다.
배운 점 혹은 좋았던 점
첫째, 이 책을 통해서 객체지향의 대부분의 어휘를 배울 수 있다. 어떤 스터디에서 이런 말을 들었다. "결국 학습이라는 것은 단어와 그 단어의 뜻을 알아가는 것이다." 이 책은 객체지향과 관련된 수 많은 단어들이 나오고 그 뜻을 설명한다. 책의 지면의 한계 때문에 그렇게 깊은 설명은 없지만, 이해하는데 크게 어렵지는 않았다. 즉 이 책은 객체지향의 대부분을 배울 수 있는 책이다.
둘째, 우리가 부딪치는 많은 고민과 문제의 가이드가 되어준다. 결국 우리는 이 책을 보고 우리 코드를 수정해야 한다. 예를 들어 인터페이스를 뺄까, 상속을 할까, state 패턴을 쓸까 등의 고민들이 있다. 이 책은 좋은 가이드가 되어 준다.
셋째, 이 책의 추천자료가 참 좋다. 이 책의 설명이 다소 부족하다고 느껴진다면 추천 자료를 통해서 더 깊이 공부해 볼 수 있다.
아쉬웠던 점
개인적으로 디자인 패턴 파트가 조금 아쉬웠다. 이 책으로 스터디를 했었는데, 디자인 패턴 부분은 책만으로는 설명하기가 좀 어려웠다. (내 능력 부족이기도...) 그래서 헤드퍼스트의 디자인 패턴을 참고했었다. 헤드 퍼스트 디자인 패턴 책도 추천한다!
객체지향의 사실과 오해와 비교한다면
최근에 객체지향의 사실과 오해라는 책(리뷰 링크)을 읽은 적이 있다. 사실과 오해 책과 비교했을 때 이 책은 좀 더 실용적이다. 왜 이렇게 객체가 협력을 하는지 대해서 설명하기 보다 조금씩 추상화하고 코드를 정리하면서 객체의 협력을 만들어 내는 느낌이다. 처음부터 설계를 생각해내는 것과 리팩토링의 차이랄까.
어쨌든 둘 다 읽으면 좋은 것 같다.
결론
집에 일찍 가고 싶으면 꼭 한번 읽어보자.