Skip to content
Ulog
GitHubEmail

『객체지향의 사실과 오해』

4 min read

객체지향 언어로 개발을 하고 있기 때문에, 객체 지향의 교과서라는 평을 받는 이 책을 읽게 되었다. 이 책을 읽으면서 계속 느낀 것은 나는 아무것도 몰랐다는 것이다. 객체지향 언어 하나 뚝딱 배워서, 그냥 내 마음대로 코드를 쓰고 있었다.

객체지향의 핵심을 클래스가 아니다. 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다 클래스는 협력에 참여하는 객체를 만드는 데 필요한 구현 메커니즘일 뿐이다.

절차지향 언어와 객체지향 언어의 가장 큰 차이가 클래스이기에, 나도 모르게 객체는 클래스라고 오인했던 것 같다. 하지만 클래스는 구현 메커니즘일 뿐이라는 말을 보고 아니라는 것을 이해했다. 그리고 평소에 코드를 짤 때 인터페이스는 아예 사용하지 않는 편인데, 다른 사람들이 인터페이스를 사용하는 것을 보며 나도 써야하는지 생각한 적이 있다. 하지만 내가 쓸까 생각했던 그 인터페이스도 적절한 인터페이스는 아니라는 것을 이 책을 읽고 깨달았다. 다른 사람들이 사용하는 인터페이스는 유스케이스에 대한 인터페이스였고, 나 또한 유스케이스와 객체간 협력을 전부 개발했지만 유스케이스에 대해서만 고민하고 실제로 객체 간의 협력에 대해서는 단 하나의 고민도 하지 않았다. 많은 반성을 했다.

항상 객체지향의 특징에서 나오는 '결합도, 응집도, 캡슐화' 같은 단어를 대충 읽고 넘겼다. 심지어 자바 시험에서 저런 단어들이 나와서 찍고 틀린 적도 있다. 하지만 이 책을 읽고 비로소 이해하게 되었다. 특히 캡슐화를 기계에 빗대어 설명한 게 인상 깊었다. 캡슐화는 동작이 '무엇'인지만 사용자에게 알려주고 내부에서 어떻게 동작하는지는 숨겨놓는 것인데, 동작을 기계에 버튼에 적어놓고 그 버튼을 눌러도 사용자는 안에서 무슨 일이 일어나는지 모르는 점을 비유했다.

마지막으로, 길 찾는 두 가지 방법을 통해 객체의 탄탄한 구조에 대한 중요성을 강조한 게 인상 깊었다.

길을 찾는 방법은 두 가지가 있다. 이때, '주민에게 물어보고 가는 것' 보다 '지도를 보고 가는 것'이 이 길 뿐만 아니라 다른 길을 찾을 때도 쓸 수 있으며, 시간이 흘러도 지형은 변하지 않으므로 사용할 수 있다는 장점이 있다. 평소에 무작정 기능이 중요하다고 생각했기 때문에, 기능을 정의하고 그 기능을 맞추어 개발했는데 이 이야기를 보니 객체 지도를 설계하는 것이 중요하다는 것을 새삼 깨달았다.

내 코드와 내 설계를 반성하고 더 나은 설계를 하도록 하는 좋은 책이었던 것 같다. 마냥 개발하는 것이 아니라, 이런 개발 교양 서적을 많이 읽어야갰다.