본문 바로가기

기타/객체지향의 탄생(2013)

객체지향의 탄생-객체지향을 이롭게 하는 5가지 특징

나는 시스템이라는 용어를 좋아한다. 국어사전의 정확한 정의를 보니 '시스템은 필요한 기능을 실현하기 위해 관련 요소를 어떤 법칙에 따라 조합한 집합체'라고 한다. 시스템은 집합체 구성요소 하나만 잘하면 되는 것이 아니고 모든 구성요소가 정확하게 맞물려가야만 시스템이 작동된다.

 

그래서 복잡다단한 구성요소들이 자기의 위치에서 정확하게 시스템을 위한 일을 할때, 내가 속한 시스템이 건강하게 돌아가는 것을 보면, 나는 복잡다단한 구성요소들의 협동심에 감탄하고 나도 저런 구성요소가 되야 겠다는 생각을 한다.

 

세상은 모두 경이로운 시스템들이 또 다른 시스템에 속하고 더 큰 시스템에 속하는 식으로 마치 알고리즘의 재귀구조로 블랙홀에 빠져들어가듯이 연관되어 있다. 사람도 수많은 장기가 유기적으로 돌아가는 시스템이고 최근에 관심갖게된 자동차 구조를 보니 복잡한 부품들이 어떻게 저렇게 잘 맞물려 돌아갈까 신기하기도 하다.

 

세상은 이렇게 여러 시스템이고 하나의 시스템이기도 하다. 객체지향도 시스템 관점, 나무보다 숲을 보는 관점으로 접근하는 것이 좋다. 객체지향을 공부하고 이해할때도 시스템 관점으로 객체지향의 각 요소가 어떻게 결합하여 큰 효과를 내는지 접근하는 것이 좋다.

 

 

우리는 객체지향 특징 하나하나가 프로그래밍에 유익한 효과를 준다는 것은 어렴풋이 알고 있다. 늦게 깨달은 사실 하나는 객체지향 특징들이 우리 생태계처럼 유기적으로 관계를 맺을 때 1:1은 2가 아니라 100이상의 시너지 효과를 낸다는 것이다. 객체지향 특징 하나하나의 효과만 생각했지 객체지향 특징들이 유기적으로 뭉쳐서 큰 효과를 낸다는 생각을 못했다. 이제 나는 객체지향 특징들이 어떻게 유기적으로 뭉쳐 큰 효과를 만들어내는지 설명할 것이다.

 

 

다시 객체지향 휴양림으로 돌아갔다. 거대하고 우람한 숲을 가꾸기 위해 우리는 객체지향 방식을 선택했다. 객체지향 방식이 좋은 이유는 낮은 해충 높은 영양(낮은 결합도 높은 응집도) 이라고 한다. 정말 그런지는 좀더 지켜볼것이다.

 

객체지향 나무의 뿌리는 인터페이스와 같다. 뿌리가 튼튼하고 잘 뻗어 있을수록 나무는 우렁차고 나무의 생명력은 길며 나무가 전파하는 이로움은 크다. 인터페이스는 마치 뿌리의 역할처럼 객체의 성장과 건강을 좌우할 엄마 같은 존재이다. 인터페이스는 나에게 속한 객체들이 이러이러한 기능을 제공할 것이라고 약속하고 정의하는 역할을 한다.

 

메소드의 오버라이딩은 나무가 진화하고 나무의 도움으로 생물이 진화하는 과정과 같다. 처음에 나무들의 특징과 기능은 비슷했다. 그러나 땅과 기후마다 좀더 잘 적응하기 위하여 나무들은 다양한 방법으로 개성있게 진화해왔다.

 

오버라이딩은 조상의 유전자를 이어받았지만 자신의 생존환경에 맞게 변화하고 개선하는 생명체와 같다. 오버라이딩은 부모로부터 이어받은 메소드에 자기만의 특화된 로직을 작성하는 과정을 말한다.

 

캡슐화와 정보은닉은 비처럼 은밀하게 다가와 숲을 안전하게 적셔준다. 산불을 막아주는 효과와 같다. 숲과 나무들의 고유 특징을 산불 같은 자연재해로부터 안전하게 지켜준다. 숲과 나무들이 건조하고 외부의 자연재해에 자주 노출된다면 숲과 나무들의 일부는 죽고 대부분은 건강하게 자라지 못한다. 캡슐화와 정보은닉은 객체의 생명인 속성을 외부의 접근으로부터 안전하게 보호하는 과정을 말한다.

 

태양은 숲과 나무의 성장에 필요한 가장 근본적인 존재이다. 상속과 폴리모피즘은 태양의 에너지처럼 숲의 성장에 필요한 근원적인 에너지로 발산된다. 상속과 폴리모피즘이야말로 객체지향이 존재하는 큰 이유가 된다. 상속과 폴리모피즘이란 태양과 같은 기본적이면서 중요한 원리를 구현하지 않는다면 객체지향 숲이 존재할 이유가 없어진다. 상속은 부모 객체의 속성과 기능을 물려받아 같은 기능의 중복 없이 기능을 재사용하는 개념이다. 폴리모피즘은 클라이언트 객체가 부모 객체만 알고 있는 상태에서 같은 메소드지만 각각마다 특화된 기능을 가진 여러 자식 객체를 넘겨 받는 매우 유연하고 확장성 높은 개념이다.

 

상속 대신 구성은 인간의 인위적인 노력과 같다. 숲과 나무는 알아서 성장하지만 무서운 자연재해 앞에 성장이 더딜때도 있다. 몇날 며칠 비만 쏟아지고 해는 뜨지 않거나, 매서운 추위가 닥치거나, 숨막히는 산불이 숲과 나무를 위협한다. 상속 대신 구성은 이런 자연재해로부터 숲과 나무를 보호하는 인간의 인위적인 노력과 같다. 상속 대신 구성은 부모 객체를 무조건 상속받아 기능을 확장하는 것이 아니라 다른 객체 그룹군에게 기능 구현을 대신 맞기고 객체 그룹군과 관계를 맺는다.

 

이 모든 객체지향 요소가 골고루 잘 시스템화 되어 구현할 수 있다면, 객체지향의 효과를 누리고 프로젝트도 성공할 것이다.

 

객체는 나무와 같아야 하고 어플리케이션은 숲과 같아야 한다.

 

 

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.