배민의 조영호님 저자의 객체지향의 사실과 오해를 읽었습니다. 책의 난이도는 전공서적처럼 이론이 빼곡히 차들어있지는 않지만 일반 교양서적처럼 쉽게 술술 넘어가는 것도 아닙니다. 객체지향으로 프로그램을 하나 설계해본 경험이 있으면 이해하기가 수월할 것입니다.(그냥 따라쳐본 경험이라도 그 과정에서 이해하고자 하는 노력이 있었다면 괜찮습니다.)
학원출신의 비전공자 개발자라면 초반에 객체지향에 대한 개념을 간단하게 배우고 넘어갔을 것입니다. 생소한 개념을 짧은 시간에 완벽하게 이해하는 사람은 드물 것이고, 그마저도 그 이후에 정신없이 진도를 빼느라 잊어버렸을 것입니다. 그 과정에서 캡슐화, 상속, 추상화, 다형성을 적용하여 코드를 작성해봤지만, 그 과정이 상당히 번거롭고 ‘그런데 왜 이렇게 귀찮게 해야 하는가?’ 라는 생각이 들었을 수도 있습니다. 이 책에서는 그 의문을 해소해 줍니다.
책에는 좋은 객체지향 프로그래밍을 설계하기 위한 방법이 많이 나와 있습니다. 기본적인 4가지 특징인 캡슐화, 상속, 추상화, 다형성 외에도 책임주도 설계, 디자인패턴, 테스트주도 개발 등이 있습니다. 이것들에 대한 개념을 이미 아는 내용이라고 소흘하게 넘어가면 안 될 것입니다. 단순히 코드의 모양을 아는 것과 책에서 설명하는 개념들과 함께 흐름을 이해하는 것은 큰 차이가 있습니다.
그래서 이러한 방법들을 사용해서 얻는 이점이 무엇인가 하면 객체가 협력적이고 자율적이 됩니다. 객체들이 하나의 역할로 단순화되고, 다양한 객체들이 협력에 참여하여 협력이 유연해지며, 다양한 객체들이 동일한 협력에 참여하여 재사용성이 높아집니다. 그래서 이렇게 하면 프로그램으로서 뭐가 좋은가? 객체지향의 원칙을 잘 지켜서 만들어진 프로그램은 사용자가 원하는 기능을 빠르고 안정적으로 추가할 수 있게 됩니다.
프로그램은 한번 만들어서 배포하고 나면 끝나는 것이 아니라 계속해서 사용자의 요구사항을 반영하여 업그레이드 해 나가야 합니다. 그래서 새로운 기능을 기존의 구조를 변경하는 일이 없이 빠르게 추가할 수 있다는 것은 상당히 중요한 일입니다. 객체지향을 공부하시다가 내가 왜 이런 어려운걸 이해해야 하며 번거로운 코드를 작성해야 하는가? 하면 이 사실을 떠올리면 좋을 것 같습니다.
처음 한권 읽는데에 10시간정도 걸린 것 같습니다.(순수 읽은시간만 따지면 그렇고 일수로는 2주정도 걸렸습니다.) 비교적 가볍게 읽기 좋은 책이니 부담없이 2회독, 3회독도 가능할 것 같습니다. 하지만 저는 지루함을 못 견디는 성격이라 다른 책으로 다시 돌아오겠습니다.