티스토리 뷰
상속은 객체지향 언어에서 매우 중요한 역할을 한다. 객체지향 프로그래밍의 주요 3요소가 ‘상속’, ‘캡슐화’, ‘다형성’이라는 말까지 있을 정도이니 말이다. 상속은 사용하던 프로그램이 환경이나 다른 문제에 의해 사용하기 까다로운 상황이 되었을 때 프로그램 수정을 간단하게 하기 위해 사용한다. 보통 상속의 객체는 ‘부모 객체’와 ‘자식 객체’로 나뉘는데, 직관적으로 생각해도 ‘부모’가 자식을 여러 명 낳는 것은 문제가 되지 않지만, ‘자식’이 부모를 둘, 셋 이상 가지는 것은 이상하다고 생각된다.(한 ‘부모 객체’가 아버지와 어머니를 모두 포함한다고 했을 때를 가정.) 하지만 그런 일이 현실에서도 아예 없는 것은 아니고, 역시 프로그래밍에서도 (특히 C++에서) 이것을 허용하며 이를 ‘다중 상속’이라고 한다.
다중 상속은 심각한 취약점을 가지고 있다고 평가되기도 한다. 다시 현실로 돌아와, 부모가 여럿이 있다고 생각해보면, 우선 족보가 매우 꼬이고 후에 유산의 문제가 생길 수 있다. 다중 상속에서도 이러한 문제가 생기는데, 이를 직관적으로 표현 한 것이 ‘죽음의 다이아몬드(the Deadly Diamond of Death)’이다.
자식 이기는 부모는
없다고, 자식 객체는 부모의 물건을 사용할 수 있다. 하지만
부모가 자식의 물건에 손을 대면 자식이 불같이 화를 내기 때문에(후레자식...) 부모 객체는 자식의 물건에 손을 대지 않는다. 한
객체의 자식 객체의 자식 객체가 있다고 했을 때, 최상위 부모 객체의 자식 객체가 1개가 아니라 2 이상일 수도 있다.
그리고 위에서 말했던 ‘다중 상속’이 일어나
위 그림과 같은 상황이 일어날 수도 있다. 위 그림을 살펴보면, 만약
ComboDrive에서 brun();을 사용했다면 CDBurner와 DVDBurner, DigitalRecorder 중
어느 객체의 함수를 사용한 것일까? 아니 애초에 어느 객체의 함수를 사용할 것인 지 애매한 상황이 생긴다. 또한, i라는 변수에 접근을 한다면 도대체 어떤 부모함수를 거쳐
DigitalRecorder에 접근할지 애매한 상황이 생긴다. 프로그래밍
언어는 ‘같은 구문이 두 가지
이상의 의미로 해석되지 않아야 한다.’ 다중 상속은
이러한 문제를 야기할 수 있으며, 따라서 일부 프로그래머들에게 ‘없어져야
할 문법’이라는 비난을 받기도 한다. 물론 C++에서는 ‘가상 상속’이라는
개념을 이용하면서 이 다중 상속을 계속 이끌어 나가지만, 그럼에도 불구하고 사실상 ‘최대한 사용하지 말아야 할 문법’이라는 오명은 씻지 못하는 상황이다.
혹시 잘못된 내용이나 오류가 있다면 댓글로 알려주세요!! 공부를 위해 올린 글이니 태클은 언제나 환영입니다!!
'C++' 카테고리의 다른 글
(SFML) C++에서 SFML을 이용하여 2D(포트리스)게임 만들기 2차 (3) | 2018.07.26 |
---|---|
(SFML) C++에서 SFML을 이용하여 2D(포트리스)게임 만들기 1차 (0) | 2018.07.26 |
순수 가상 함수(Virtual Function)가 다중 상속에 안전한 이유 (0) | 2018.05.20 |
C++에서의 추상 클래스 (Abstract Class in C++) (0) | 2018.05.20 |
- Total
- Today
- Yesterday
- 완전탐색
- Dynamic Programming
- DFS
- 컨트리뷰톤
- webOS
- 코딩
- c++
- 한화큐셀
- 인공지능
- 1932
- 플로이드 와셜
- BaekJoon
- 이분탐색
- 알고리즘
- 정렬
- 구현
- 백준
- 백트래킹
- LG
- c
- 카카오
- PyPy3
- DP
- 프로그래머스
- BFS
- 동적 계획법
- 피보나치
- 브루트포스
- 오픈소스
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |