티스토리 뷰


"인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다."

학부때 객체지향 설계라는 과목이 있었다. 필수과목이어서 듣긴 했지만 언젠가 면접때 수업중에 가장 기억에 남은 수업이 뭐냐고 물었을 때 그 수업을 얘기했었다. 이제와서 그 질문에 다시 똑같은 대답을 할 순 없지만 그 정도로 학부 그것도 신입생때 그 개념에 대한 충격이 컸다. (사실은 안그래도 어려운 이론을 딱딱하게 가르치는 다른과목에 비해 객체지향이란 개념에 대한 역사와 철학을 설명해주신 교수님 덕분이었던 것 같기도 하고..) 


클래스와 객체, 상속 이런 개념이 당시 관심가지고 있는 플라톤의 이데아 철학과도 비슷하다는 생각을 하고 있었고.. 왜냐하면 클래스는 실제 존재하지 않는 이상향이라고 하면 객체는 클래스를 닮은 실제 존재하는 녀석이니까. 지금 생각하면 조금 부끄럽지만 당시는 유레카! 같은 기분이었는데 (웃음) 오히려 스피노자가 말하는 신과 인간의 관계에 오히려 더 어울리기도 하고


이런 맥락이 컴퓨터 공학에 존재한다는 것 자체가 너무나 신선했고 누가 이런 생각을 해냈을까 분명 이 개념을 만든 사람은 반쯤은 철학자일 것이다. 그런 생각을 했던 것 같다. 혼자 (웃음) 


하지만 이러고 나서 객체지향에 대해 구체적으로 생각을 해본 적이 없었다는 게 사실 하고 싶은 말이다. 사실 커리큘럼에서는 3,4학년이 되면 UML 수업을 들으며 객체지향적으로 설계를 하는 후속 수업이 있긴했었다. 그 때쯤에 이미 다른 전공과 교양에 심취해 있어서 서너번 청강을 들어갔다가 팀별로 프로젝트 한대서 자연스럽게 빠져나온게 다였다. 그래서 회사에 오래 계셨던 분이 SOLID 개념을 아냐고 물었을 때 그 분 입장에서 당연히 알아야 할 것을 내가 모르고 있다는 게 굉장히 당황스러웠고 개념을 좀 더 확실히 알고 싶다는 생각이 들었었다. 


그런 점에서 이 책이 부족했던 부분을 많이 채워 준 것 같다. 이 책을 보면서 객체지향에 대해 이렇게 정확하면서 쉽게 쓴 책이 있을까 생각이 들었다. 심지어 소프트웨어 공학을 공부하며 늦게서야 알게 된 책임주도 설계, 테스트 주도 개발, 역할기반 설계 등 사실 설계에서 기본이 되는 개념들을 이렇게 쉽게 설명해놓다니.. 


처음에 요구사항 만들고 설계를 해서 프로젝트를 하라고 하면 백퍼센트 그냥 구현하고 구현한 거 가지고 문서 끼워 맞춰서 만들어가지고 제출한다. (아니면 말고.. 나만 그렇게 했었나..) 요구 사항이라고 해봤자 그나마 쉬운 유스케이스 모델링이고, 설계는 그냥 클래스 다이어그램, 조금 더 하면 시퀀스 다이어그램, 테스트 설계도 대충대충.. 그러다보니 도대체 문서화를 왜 할까 싶기도 하고 


학부때 프로젝트 할 때 정말 이런 식으로 많이 했었다. 그런데 그 때 이 책을 봤었더라면 제대로 설계를 할 수 있지 않았을까 감히 생각할 수 있을만큼 객체지향의 이론적인 개념뿐만 아니라 정말 객체지향의 장점을 잘 드러내기 위해서 설계 방법에 대해 잘 설명이 되어 있다. 특히 뒷 장에서 객체 지도 (지도에 비유를 하며 설계 방법을 기능적, 구조적으로 나누어 설명하고 있다)에서 도메인 모델과 유스케이스 모델을 사용하는 방법이 정말 큰 인사이트였다. 

댓글