보통 컴퓨터의 역사에서 절차지향과 객체지향이 나온 동기를 이해하며 객체지향을 배운다.
나는 이런 기본이 부족하기 때문에 내 식대로 객체지향을 해석할 것이다.
나의 사상은 이렇다. 소프트웨어는 순수하게 사람이 만든 것이기 때문에 소프트웨어의 모든 것엔 의도가 존재한다.
나의 출신이 출신인지라 진리를 탐구한다고 오해하는 물리의 이론이 사람의 주관이 들어간 것이란걸 이해하고 있고, 소프트웨어 또한 마찬가지라고 생각한다.
따라서 소프트웨어를 이해한다는 것은 만든 사람의 선택과 의도를 이해하는 것이다.
만든 사람들이 천재라고 생각하지 말자. 소프트웨어의 생각의 강도는 단단하지 않으므로 쫄지 않고 만든 사람의 의도를 파악하려고 하면 금방 이해할 수 있으니
객체지향을 왜 만들었을까? 프로그램을 잘 운영하기 위해서이다. 일을 잘하기 위한 모델은 이미 산업화 시대에 만들어졌다.
객체지향은 분업화다.
장인의 시대를 지나 석탄의 발견과 증기기관의 발전, 분업을 통한 공장식 생산이 매우 뛰어난 효율을 가졌다는 것은 자명하다.
싸피를 다니고 있으니 삼성전자의 예를 들어보자.
삼성전자는 철저하게 분업하여 운영된다.
삼성전자 DX, DS, research 등등 그 안에서도 사업부가 있고, 그 사업부 안에선 또 부서가 나뉘었다.
요점은 각자의 책임을 가지고 철저하게 분업화가 되어 있다는 점이다.
예를 들어서 삼성이 스마트폰을 만들 때 상품기획, 디자인, 개발, 소프트웨어의 단계를 거치는 데 이때 수 많은 부서가 협력하여 스마트폰을 완성하는 구조이다.
이런 철저한 분업 모델을 그대로 소프트웨어에 적용한 것이 객체지향이라고 할 수 있다.
따라서 객체지향의 원리를 이해하기 위해선 우선 객체지향이 철저한 분업화란 것을 명심해야한다.
나는 이런거 안 외운다.
내가 소프트웨어를 공부하며 느끼는 게 소프트웨어 분야는 이상하게 용어와 정의에 집착하는 경향이 있는 것 같다.
캡슐화, 다형성, 추상화 등등 이런거에 대해서 설명해보세요란 문제들이 있고 이를 외우는 건 별로 도움이 되는 것 같지 않다.
분업화의 관점에서 보면 그냥 저절로 이해가 되는 원칙들이 많다.
다시 삼성의 예를 들어보자.
삼성이 철저한 분업화로 최적의 효율을 추구했는데, 분업화를 망치면 효율이 떨어진다.
스마트폰의 디자인은 디자인 부서가, 디스플레이를 만드는 건 디스플레이 부서, 회사의 운영은 경영 부서가 맡아야지 다른 부서가 책임을 맡을 필요도 없고 속사정을 알아서도 안된다.(캡슐화)
이런 부서들이 협력할 땐 그냥 메세지만 보내면 된다. 스마트폰을 조립하는 애들은 각각의 재료들을 담당하는 부서에 그냥 재료내놔 이 한마디만 하고 결과물로 재료만 받아야 한다.(메세지)
이런 메세지를 주고 받을 땐 각각의 부서의 자세한 구현을 알 필요는 없다.
디스플레이 내놔(o)
너네 공장의 시리얼 넘버(xxs~~~), 언제 생산되었고 재료는 ~~, 생산 공장은 ~~인 디스플레이 내놔 (x)
(추상화)
철저하게 분업화를 생각하면 그것이 객체지향이다.
철저하게 분업화가 안되면 그게 객체지향의 안티 패턴이다.
블라인드에서 거론되는 삼성의 문제점이 대표적이 예다.
경영하는 애들은 기술에 대해서 알 필요가 없다. 기술은 온전히 기술자의 책임이어야 하고 경영은 경영의 책임만 다하면 된다.
경영이 기술의 영역을 침범하여 관여하는 건 분업화에 실패한 것이고 효율을 망치는 일이다.
객체지향도 마찬가지다. 객체지향에서 거론되는 의존성 문제와 해결방법은 한 객체가 다른 객체를 침범하고 너무 깊게 연관되어서 발생한다.
적절하게 뭉치고, 적절하게 책임을 나누어서 철저하게 분업화 하는게 객체지향을 잘 설계하는 방법이라고 생각한다.
다음 시간엔 이런 방법에 대해서 논의하겠다.