박지훈.임프 님이 쓰신 글 :
: 글쎄요.. 긁적긁적...
: 다중상속은 C++ 개발자들조차 거의 쓰지 않는 죽은 기능이나 마찬가지입니다.
글쎄요, C++ 개발자들은 대부분의 프로그램에서 다중상속의 혜택을 보고있습니다.
대표적인 예가 std::iostream이죠.
다중 상속이 필요성에 관련된 글을 civilian님의 답글로 올렸습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=free&no=6745
: 물론 일단 있는 기능이라면 어떤 식으로든 활용하는 사람도 아주 없지는 않겠지만,
C++의 철학은 "C++이 제공하는 모든 기능을 프로그래머가 잘 사용해서 완벽한 C++ 프로그램을 만들어라."가 아니라, "이런 기능이 있으니까 필요하면 갖다 쓰세요."라는 겁니다. 필요없으면 쓰지 않으면 그 뿐입니다.
: 개발 뿐 아니라 유지보수까지 힘들어지기 때문에 다중상속은 안쓰는 것이 오래전에 대세로 굳어졌죠.
다중 상속은 생명체의 탄생처럼 자연스러운 개념이고, 이것이 없으면 모델링하기 힘든 문제
(일부 디자인 패턴과 같은)가 실세계에는 분명히 존재합니다.
다중 상속이 없어도 모든 프로그램을 만들 수 있다고 고집하는 것은, C가 있으므로 C++이 필요없고, 어셈블리가 있으므로 고급언어가 필요없다고 보는 것과 마찬가지입니다.
: 자바나 C#이 다중상속을 지원하지 않는 것은 기능을 추가하기 힘들어서가 아니라, 다중상속이
: 그다지 많이 필요하지 않고 문제를 많이 일으키기 때문이지요.
아닙니다. 자바 등의 언어가 다중 상속을 지원하지 않는 가장 큰 이유는
컴파일러 차원에서 다중 상속을 구현하기가 힘들다는 점입니다.
프로그래밍 언어 중 가장 복잡한 구조를 가진 컴파일러는 바로 C++입니다.
아직도 1998년에 나온 ANSI C++ 규약을 100% 정확하게 지키는 컴파일러는 존재하지 않습니다.
C++의 또다른 철학은 "컴파일러를 엄청 나게 고생시켜서 프로그래머를 편하게 해보자."는 데 있습니다. 요새 한창 뜨고 있는 template metaprogramming의 경우는 정말 엄청나더군요. 컴파일 타임에 타입을 어떻게 주느냐에 따라 완전히 다른 코드가 만들어지는 대단한 기법이죠(이에 대해서는
http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html 를 참고하세요.
프로그래머 입장에서는 신기할 따름이지만, 컴파일러의 오버헤드는 엄청나겠죠.)
다음달에 한글판이 출간 예정인 Andrei Alexandrescu의 "Modern C++ Design : Generic Programming and Design Patterns Applied"도 템플릿 메타프로그래밍의 일종인 partial template specialization
등의 기법을 설명한 책입니다.
http://www.wowbook.com/computer/book/info/book_detail.asp?isbn=ISBN0-201-70431-5&review=15673#start
자바의 경우는 완전히 반대의 철학을 갖고 있습니다. 자바가 처음에 가전제품에서 사용되는 것을 목적으로 했듯, 컴파일러와 JVM 구현을 가능한 쉽게 해서 어떤 시스템이든 JVM을 이식하는데 목적을 두고 있죠. 그래서 웬만한 임베디드 시스템에는 JVM이 대부분 이식될 수가 있는 것이죠. 그래서 다중상속과 같은 까다로운 구현은 배제시킨겁니다.
: 아마 볼랜드에 요구한다고 해도... 콧방귀도 안뀔 겁니다. ^^;;
빠른 컴파일 속도로 빠른 개발을 가능하게 하는 것을 목적으로 하는 델파이도 같은 이유로 다중 상속을 배제한 걸 겁니다. 아마 다중상속이 가능하다면 지금보다 컴파일 속도가 두배 이상 느려지겠죠. -_-
: 어떤 이유로 다중상속이 필요한지 모르겠습니다만, 어린왕자님이 말씀하셨듯이 인터페이스를
: 이용해서 다중상속을 구현해보는 것도 좋을 것 같습니다. 인터페이스 다중상속의 예는 VCL의
: 소스코드를 보시면 줄줄이 나오죠. 클래스와 인터페이스를 상속받아 하나의 새 클래스를 정의하는
: 겁니다.
:
: 그럼...
:
:
: 박정모 님이 쓰신 글 :
: :
: :
: : 왜 델파이는 다중 상속을 지원안하는 겁니까?
: : 컴파일속도 좀 느려져도 괜찮은데, 문법이 까다로워져도 상관없는데,
: : Pascal언어 확장팩으로 라도 좋으니까 제발 다중 상속좀 지원해줬으면...
: :
: : 정말 미치겠네요. 깊이 있는 클래스 설계할 때마다 부딪히는게 다중
: : 상속입니다. 다중상속 지원안해서 해야하는 이 노가다의 버거움이여... ㅠ.ㅠ
: : 서로 다른 클래스에 같은성질의 멤버함수 만들고 또 만들고~
: :
: : 박지훈씨... 박지훈씨 힘 있으니까 볼랜드에다가 제안좀 해주십시요.
: : 언어 확장팩으로라도 다중상속 지원하게 해달라고.
: :
: : 다중상속을 위한 Pascal언어 확장팩이 나오면 100만원 한다고 해도
: : 사서 쓰겠습니다.
: :
: : 그러지말고 C++ Builder 쓰라고요? 저도 C++ Builder쓰고 싶습니다. 그런데
: : C++ Builder로 만들어 놓으면 아무래도 범용성이 떨어지니까... ㅠ.ㅠ
: :
: :