본문 바로가기

기타/객체지향 토막글

객체지향을 이롭게 하는 5가지 특징, 수필 객체지향

+ 객체지향 생태계
우리는 객체지향 자연 속에 있다. 객체는 나무이며 애플리케이션은 숲이다. 낮은 해충(결합도)과 높은 영양(응집도)으로 유명한 객체지향 지역에 나무를 심고 울창한 숲을 기대한다.

 
땅은 객체지향 그 자체이다. 클래스 씨앗을 땅에 심는다. 씨앗이 생성자 통해 발아되어 객체가 되었다.

나무의 형태가 갖춰졌다. 속성은 줄기와 같다. 속성은 나무를 지탱하고 그 존재를 지키고 세상에 알리는 나무의 중심이다. 메소드는 가지와 잎과 꽃과 열매와 같다. 울창한 가지와 잎으로서 나무 자신과 산과 지구와 생물을 지켜주면서 자신의 존재를 뽐낸다.  이 나무들이 모이고 커져서 모든 생물을 이롭게 하는 거대하고 우람한 숲이 될 것이었다.

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



+ 객체지향을 이롭게 하는 5가지 특징
거대하고 우람한 숲을 가꾸기 위해 우리는 객체지향 방식을 선택했다. 객체지향 나무의 뿌리는 인터페이스와 같다. 뿌리가 튼튼하고 잘 뻗어 있을수록 나무는 우렁차고 나무의 생명력은 길며 나무가 전파하는 이로움은 크다.

메소드의 오버라이딩은 나무가 진화하고 나무의 도움으로 생물이 진화하는 과정과 같다.  나무들의 특징과 기능은 비슷하지만 땅과 기후에 적응하는 다양한 후손으로 생물들은 진화해왔다.

캡슐화와 정보은닉은 비처럼 은밀하게 다가와 숲을 안전하게 적셔준다. 그래서 산불을 막아주는 효과와 같다. 숲과 나무들의 고유 특징을 산불 같은 자연재해로부터 안전하게 지켜준다. 

상속과 폴리모피즘은 태양의 에너지처럼 숲의 성장에 필요한 가장 근원적인 에너지로 발산된다. 상속과 폴리모피즘이란, 태양과 같은 기본적이면서 중요한 원리를 구현하지 않는다면 객체지향 숲이 존재할 이유가 없어진다.

상속과 구성은 인간의 인위적인 노력과 같다. 숲과 나무는 알아서 성장하지만 무서운 자연재해 앞에 그 성장이 더디기도 하다. 몇날며칠 비만 쏟아지고 해는 뜨지 않거나, 매서운 추위가 닥치거나, 숨막히는 산불이 숲과 나무를 위협한다. 상속과 구성은 이런 자연재해로부터 숲과 나무를 보호하는 인간의 인위적인 노력과 같다.

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

[삽화]

객체지향 세계는 숨겨진 보물이 가득찬 이상한 나라의 엘리스와 같다. 먼저 객체지향 세계의 인터페이스니, 오버라이딩이니,폴리모피즘이란 단어는 거부감이 든다. 한글로 풀어도 겨우 상속과 구성이라는 머리 아픈 단어로만 해석이 된다. 그래서 이 단어들은 이상한 나라의 엘리스의 괴물과 같다. 무엇보다 이상한 나라의 엘리스의 세계관을 이해하는데 한참 걸린다.

더 나아가 이상한 나라의 엘리스의 괴물도 이겨내고 세계관을 이겨내어 숨겨진 보물 찾기(유연성과 확장성)가 여간 힘든일이 아니다. 그러나 여기 ‘객체지향 보물지도’가 있다. 마치 구겨지고 누런 종이 쪼가리 속의 보물지도처럼 예쁘진 않지만 객체지향 세계를 이해하기 위한 중요한 단서들이 담겨 있는 지도이다.

[그림 1.2-1, 객체지향 보물지도]

위 그림을 머릿속에 저절로 그리는데 한참 걸렸던 것 같다. 이 그림이 그려질때가 되어서야 비로소 객체지향의 장점을 알고 쓰기 시작했다. 그 전에는 구구단 외우듯이 객체지향 특징을 공부했기 때문에 큰 그림을 그릴 수 없었다. 아마도 딱딱한 책 때문이었을 것이라는 핑계를 댄다.

우리가 객체지향을 공부하는 이유는 객체지향 시험을 잘보기 위해서가 아니다. 객체지향을 통해 좀더 나은 프로그램을 짜는 것이 목적일 것이다. 그렇다면 객체, 클래스, 상속의 사전적인 뜻만 외우지 말고 객체지향의 요소가 어떻게 뭉치고 상호작용하는지 ‘그림으로 그려야’ 한다.

객체지향 보물지도를 보면,
단서1. 인터페이스, 기본적으로 인터페이스나 추상 클래스를 선언한다.
단서2. 오버라이딩, 부모 인터페이스에서 정의한 기능을 상속 클래스마다 다르게 구현한다.
단서3. 캡슐화와 정보은닉, 각 클래스들의 중요 속성은 ‘높은 응집도와 낮은 결합도’를 위해서 안전하게 보호되어야 한다.
단서4.  상속과 폴리모피즘, 이 영역에 속한 클래스 다이어그램은 전형적인 상속 구성도를 나타내고 있다. 상속 클래스1,2,3 은 인터페이스에서 명시한 기능을 각각 다르게 구현하였는데, 이 클래스들은 부모 인터페이스만 의존하고 있는 ‘클라이언트’ 클래스에 동적으로 대입하게 될 것이다.
단서5. 상속과 구성, 클라이언트는 상속을 쓰지 않고 다른 4.영역 안에 있는 ‘객체 패밀리’에 의존하여 로직을 처리하고 있다. 이렇게 하면 프로그램 실행중에도 얼마든지 ‘상속 클래스’를 교체할 수 있다. 자유로운 교체와 확장이 가능하기 때문에 유연성이 높고 확장성이 높다.

이 다섯가지 요소가 객체지향 프로그램을 더욱 이롭게 만드는 기본적인 장점들이고, 이 장점들이 모이면 전형적인 ‘객체지향 보물지도’ 같은 패턴을 이루게 된다. 조만간 이 패턴은 곧 스트라테지 패턴으로도 불릴것이다. 객체지향의 핵심 개념을 이해하고 그 장점을 이해하기위해 이 그림을 머릿속에 그려놓고 시작하면 객체지향 보물을 발견하기 편할것이었다.


덧) 아직 고쳐쓰기가 덜 되었습니다. 예를 들면 도입부는 그럴듯하게 쓰다가 실제 설명부분에서는 풀어쓰는 부분이 덜 되었습니다. 어려운 용어의 풀어쓰기가 안되었습니다. 기타 삽화가 부족함을 이해해 주시길 바라며, 향후 책에 쓰일 원천 자료이기 때문에 펌은 불허, 링크 환영 합니다. 조언 부탁드립니다. ^ ^;