이한결 블로그 ✍️ 💻 📷 🍻

객체지향적으로 생각하라!

결코 이 포스트의 제목은 중2병 걸린 한 초보 프로그래머의 허세 섞인 장탄식이 아닌 "The Object-Oriented Thought Process"라는 책의 번역서 제목임을 밝히며 글을 시작한다. 굉장한 사족이지만 이 책의 영어 제목의 앞글자를 따면 OOTP가 되는데 이는 메이저리그 팬이라면 누구나 한 번쯤 접한 뒤 정교함과 그에 비례하는 복잡함에 혀를 내두르게 되는 어느 게임의 이름이 된다. 대단한 이야기는 아니라는 말이다.

맷 와이스펠드가 지은 《객체지향적으로 생각하라!》는 애플리케이션단의 프로그래밍에 눈을 뜬 뒤 (여러 정황상) 가장 처음 나의 멘토 역할이 되어 준 사람에게 객체지향이라는 개념을 이해하기 위한 입문서로 추천을 받은 책이다. 그 전까지 다루던 코드이그나이터나 레일스 등 기반 언어가 객체지향적이기는 하나 프레임워크의 구조상 객체적인 이해가 약하더라도 전반적인 그림을 그려나가는데 무리가 없는 친구들과 친분이 있을 때만해도 객체란 그저 인터페이스와 임플리멘테이션이 조금 더 에르고노믹하게 구성된 구조라고 이해했지만, 안드로이드처럼 객체라는 개념을 굉장히 비중 있게 다루는 프레임워크(또는 OS)를 다루게 되니 내가 얼마나 비객체적 사고 구조를 가진 인간인지 뼈저리게 느끼게 되었다. 바로 그 때 이 책이 다시 눈에 띄었고 적당한 시간을 들여 완독했다.

실제로 내용을 서술하는 부분에서는 자바를 예로 들지만 그렇게 예제로 나온 코드를 다른 언어들로도 어느 정도 풀어주고 있기 때문에 메이저한 객체지향 언어를 다루는 사람들이라면 모두가 좋은 가르침을 얻을 수 있으리라 본다. 난이도는 중하 정도라 판단이 되고 프로그래밍 언어라는 심오한 개념에 대해 아주 깊은 이해를 시도한다기보다 객체지향 언어의 특성을 이해하고 실제 프로젝트에서 그 개념이 어떻게 적용되며 어떠한 패턴과 기술들이 거기에 가미될 수 있는지에 대한 이야기가 더 주를 이른다. 예를 들면 아래와 같은 현업의 진리가 책에 생뚱맞게 들어가 있는 것이다.

간단히 말해서 초기에 요구 사항을 확인하고 설계 변경을 최소화해야 하는 이유는 다음과 같다.

각설하고 본론으로 다시 돌아가면, 객체지향이라는 개념이 그렇지 않은 패러다임(보통들 절차지향이라고 하는 것 같은데 사실 절차지향이 객체지향과 대척점에 있는 것이냐라고 묻는다면 나의 얕은 지식으론 전혀 그렇지 않은 것 같다.)보다 더 진보한 개념이라고 평가받을 수 있는 이유는 객체지향이라는 개념이 더 복잡한 시스템을 만드는데 비교적 쉬운 진입로를 만들어주기 때문인 것 같다. 객체지향이라는 개념이 어디선가 갑자기 튀어나왔기 때문에 복잡한 것을 좀 더 쉽게 만들게 도와주었다기보다는 그렇게 복잡한 녀석들을 더 쉽게 다루기 위해 고안된 개념이 객체지향일 것이라는 말이다. (확실한 이야기는 아니다.)