본문 바로가기

기타/객체지향 토막글

상속과 폴리모피즘 - 수필 객체지향

객체지향 대부분의 장점은 상속과 폴리모피즘으로부터 출발한다. C등의 절차지향 개념을 공부한 사람이 처음 상속과 폴리모피즘 개념을 배울때도, 난생 처음 프로그래밍을 배우는 사람도, 상속과 폴리모피즘 개념을 이해하는데 어려움을 표시한다. 그러다가 결국 나는 절차지향이 좋아~하며 다시 익숙한 방식의 프로그래밍으로 돌아가거나, 상속과 폴리모피즘 개념을 이해하지 않은체 객체지향 언어지만 절차지향적으로 프로그래밍을 하곤 한다. 그러나 상속과 폴리모피즘은 마치 대한민국 젊은 남자의 군대생활 처럼 반드시 거쳐야 하고 반드시 이해해야 하는 과정이다.

상속은, 스승과 제자사이와 비슷하다. 스승은 제자에게 자신의 모든 기술을 전수한다. 제자는 스승의 기술을 고스란히 체득한다. 또는 스승의 기술을 완전히 습득하기 전까지는 스승의 힘을 빌린다. 스승은 제자가 자신의 기술을 아무 생각 없이 그대로 받아들이는 것은 싫어한다. 제자가 자신의 특성에 맞게 기술을 발전 시키길 바란다.

[삽화]

상속은, 부모 클래스의 기능을 자식 클래스가 물려받는 것이다. 자식 클래스가 부모 클래스를 상속받으면 private를 제외한 부모 클래스의 모든 속성과 기능을 물려받는다. 자식 클래스는 부모 클래스의 속성과 기능을 중복 코딩할 필요 없이 그대로 사용한다. 또는 부모 클래스의 기능을 자신의 특성에 맞게 재정의(=오버라이드) 한다. 오버라이드는 폴리모피즘(=다형성)이란 객체지향 요소를 지원하며 폴리모피즘은 ‘상속과 구성’ 구조 및 디자인 패턴에서 유익하게 쓰인다.
 
[그림1.2.4-2, 상속과 오버라이드등의 관련 요소 설명]

폴리모피즘(=다형성)은, ‘신비로운’ 산타클로스 할아버지의 ‘비밀스런’ 선물 효과와 비슷하다. 어린이는 매년 12월25일마다 산타 할아버지의 선물을 기다린다. 그런데 그 선물이 어떤 선물인지 알아서는 안된다. 어떤 선물이든 어린이는 선물을 받고, 그 선물의 포장지를 뜯고, 그 선물을 쓰면 된다. 그런데 만약 어린이가 산타 할아버지의 실체를 알고, 선물이 무엇인지도 알게 된다면 ‘어린이의 동심’은 건조해질 것이다.

[삽화]

폴리모피즘이란, ‘같은 종류의 여러 객체’에게 ‘동일한 메시지’를 주었을 때 ‘각자 다르게 행동’하는 현상이다. ‘같은 종류의 여러 객체’는, ‘같은 종류의 객체중 부모 클래스’가 제공하는 ‘같은 기능’을, ‘저마다의 기능으로 재정의(=오버라이드)’ 한 상태이다. 이 ‘객체 그룹’을 쓰는 ‘클라이언트 객체’는, ‘객체 그룹’의 ‘부모 클래스’만 알고 있다. ‘클라이언트 객체’가 ‘부모 클래스’만 알고 있는 상태에서, 이 ‘클라이언트 객체’를 실행하는 ‘실행 클래스’는 ‘클라이언트 객체’ 중에 ‘같은 기능’이지만 ‘각자 다르게 행동’하는 ‘자식 클래스’중 하나를 ‘인자’로 넘겨준다. ‘클라이언트 객체’는 자신이 ‘인자’로 받은 ‘객체 클래스’를 모른다. 그냥 실행할 뿐이다. 이것이 폴리모피즘의 작동 구조이다.

 
[그림1.2.4-4, 계속하여 반복 등장하는 전형적인 상속과 폴리모피즘 구성도, 객체지향 보물지도]

상속을 통해 부모 클래스와 자식 클래스가 생겼고, 오버라이드를 통해 부모 클래스의 기능을 저마다의 특성에 맞게 재정의 했고, 상속과 오버라이드의 요소를 활용해 폴리모피즘 기능이 작동한다. 이 모든 기능이 조화롭게 작동한다면, 저마다의 다양한 기능을 가진 ‘자식 클래스’를 자유롭게 교체하고, 새로운 기능을 확장할 수 있으므로 객체지향의 온갖 장점을 누릴 수 있다. 그래서 응집도는 높고 결합도는 낮으며, 유연하고 확장성이 높고 유지보수하기 편하다는 수식어를 붙일 수가 있다.


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