C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[6763] Re:다중상속.. ??
김윤동.제라툴 [zeratul] 2137 읽음    2003-02-08 00:00
안녕하세요. 제라툴입니다 .간만에 저두 토론에 참가해보죠 ㅋ

무지한 저로서는 어느것이 옳은지 잘모르겠내요 ㅋ

다중 상속을 사용하냐 안사용하냐 꼭필요하냐 안필요하냐의 차이는 아마 개개인의 코딩 습관과

관련 된거겠죠. 아래 김백일님의 글을 보니까.

Observer, Adaptor, Bridge 패턴의 구현이 원칙적으로 불가능 하다고 하셨는데..

그건 아마 처음 패턴을 만든 분이 다중 상속을 하셔서 사용했기때문입니다.

다중상속을 하지 않고도 충분히 구현이 가능하죠 ..

실 예로 Adaptor 같은 경우는 Multiplex Inherited Adapter와 Object Adapter로 나누어서 설명되죠

또한 상속을 받아 구현 하는 경우 보는다는 Object Adapter쪽이 좀더 유연한 코드로 인정받는 것도

사실이구요 .

개인적으로 OCP패턴 중 Guard 패턴을 굉장히 많이 사용하는데 Guard 패턴 같은 경우는 여러개의 Guard를 한꺼번에 사용할 경우가 많기 때문에

다중상속을 많이 사용하죠.. 하지만 반드시 다중상속이 좋다는 예기는 아닙니다. 이건 어디까지나

제 개인적인 코딩 습관이니까요.

다중상속이 1989년에 C++로 도입된 이후로 굉장히 많은 논란이 있었던걸로 알고 있습니다.

주로 다중상속이 사용되는 경우는 두개이상의 객체에 특성을 모두 담아야 하는 경우가 아니면

거의 없다고 생각합니다. 다중상속을 사용하지 않더라도 조금 힘을 드려 이러한 것을 단일 구조로

바꿀수 있는 것도 사실이고요 ... 또한 다중상속에 결정적인 단점이라면 DDD( Dreadful Diamond of Derivation )을 들수 있겠죠.

대표적인 예 iostream의 경우죠

class  ostream : virtual public ios  { /*..*/ }
class  istream : virtual public ios  { /*..*/ }
class iostream : public istream, public ostream  { /*..*/ }

ios로 부터 상속된 virtual 들이 iostream에 내에서 과연 단일 인스턴스로 존재 할수 있는가라는
원초적인 다중상속에 문제를 가지고 있죠...
문론 Non-Virtual로 되어 있을 수도 있으니로 반드시 이 예가 맞다고는 할 수 없습니다.

또한 Implement-Dependent 문제라는 거죠. 이렇하기 때문에 약간의 오버해드를 감소해야 한다는 단점이 있습니다.

만약 Non-Virtual로 구현 되어 있다면 더 원초적인 개념으로 들어가서 상속에 의미가 있는가라는 원초적인 문제를 생각해 볼수 있죠..

VC의 MFC가 욕을 먹는 이유중에 하나가 이 다중상속과도 관련이 있다는 생각이 드내요.
예를 들면 CWnd와 제가 만든 인터페이스 두개를 상속 받아서 구현을 하면..

class TMyClass : public TInterface1,
public TInterface2,
public CWnd
{
/* something override function */
};

이러식을 클래스를 설계한후 CWnd에 있는 Function을 Override한 그 Function에서 CWnd에 Function을 Call하게 되면 작살라죠 ..

아마도 VCL이 C++ Builder에서 다중상속된다면 이와 비슷한 문제가 생기게 될겁니다.

하지만 아까 언급한거와 같이 Object Acdapter처럼 포인터를 이용한 구현으로 이를 쉽게 극복 할수

있기때문에 VCL을 쓰는데 큰 문제가 없는거죠 ..

뭐가 맞다 뭐가 아니다라는 건 잘모르겠습니다. 그때 그때 얼마나 유용하게 활용 할수 있느냐가

큰 문제죠 ^^ 다중상속이나 템플릿을 사용하면 C++다운거구 그렇지 않으면 C++ 다운게 아니라는

생각 자체는 아마도 C++이라는 언어의 근본적인 이론에 어긋나는 말입니다.

C++이라는 언어는 객체지향이라는 개념이 만이 포함된 언어가 아니라 프로그래머에게 좀더 많은

자유를 주기위한 언어이기 때문에 C++다운 프로그램이라는 말자체가 잘못된말입니다.

아는거 없는 제라툴이 괴변 몇자를 적어 봅니다.

From Zeratul

ps 춘천의 밤은 참 아름 답군요 서울에서 별을 본다는건 나무나도 힘든 일인데..

조해진 [mastercho]   2003-02-08 00:15 X
Object Acdapter  가 위임을 사용하는 경우를 말씀하신건가요?

+ -

관련 글 리스트
6730 으아아아... 미치겠다. 델파이는 왜 ??!!?? 박정모 2196 2003/02/05
6765     인터페이스의 다중상속에 대해서.. 어린왕자A 3522 2003/02/08
6742     Re:으아아아... 미치겠다. 델파이는 왜 ??!!?? 박지훈.임프 2440 2003/02/06
6749         Re:Re: 아닙니다! 김백일.cedar 1787 2003/02/06
6756             Re:Re:Re: 두분의 말이 모두 맞는 말씀입니다. 그러나... 남병철.레조 1663 2003/02/07
6752             C++... 박지훈.임프 1886 2003/02/07
6754                 박정모의 의견 & 태클 입니다. 박정모 2637 2003/02/07
6763                     Re:다중상속.. ?? 김윤동.제라툴 2137 2003/02/08
6758                     Re: 우선은 ... ㅡㅡa h1800.영화 1368 2003/02/07
6755                     웬 태클입니까 박지훈.임프 1635 2003/02/07
6744         그렇습니까? ... ㅠ.ㅠa 박정모 1619 2003/02/06
6747             PS1,2에 대한 답변입니다. 김백일.cedar 1697 2003/02/06
6748                 class implementation 은 인터페이스의 구현을 지적한 말이었습니다. (냉무) 박정모 2123 2003/02/06
6750                     그러니까 인터페이스 상속이란, 인터페이스만 동일하고 구현은 별도로 해야 한다는 뜻이죠.(냉무) 김백일.cedar 3301 2003/02/06
6751                         interface상속은 구현이 반드시 제공되야 하며, interface는 객체의 메모리 매핑이기도 합니다.(냉무) 박정모 2207 2003/02/06
6739     Re:으아아아... 미치겠다. 델파이는 왜 ??!!?? 정재필 1855 2003/02/06
6732     다중상속이 안되어서 불편한게 어떤 것인가요 ? civilian 1881 2003/02/05
6745         Re:다중상속이 안되어서 불편한게 어떤 것인가요 ? 김백일.cedar 1565 2003/02/06
6746             Re:Re:다중상속이 안되어서 불편한게 어떤 것인가요 ? civilian 1872 2003/02/06
6737         예를 들어 드리려고 이것저것 찾아봤지만... ㅠ.ㅠ 박정모 1611 2003/02/05
6731     이럴땐 정말 C++ builder 쓰고 싶은 마음이 굴뚝 같습니다. 박정모 1728 2003/02/05
6734         궁금한게 있는데요 왜 C++ 빌더로 하면 범용성이 떨어지는지.. 박주현 1596 2003/02/05
6735             음~ 제가 말한 "범용성"이란... 박정모 2159 2003/02/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.