[완료]C++ 코드 작성시 다중상속은 삼가야 한다고요?

jeongheumjo의 이미지

안녕하세요?

궁금한게 있어서 여러분의 의견을 듣고 싶습니다.
C++ 책(윤성우씨 freelec)을 보면 다중상속은 쓰지마라!고 설명하고 있습니다.

지금껏 그렇게 생각해왔었지요.. 물론 C++을 거의 사용하지 않아서 고민할 필요가 없었습니다.

그런데 요즘 C++ 프로젝트를 하면서 디자인패턴이라는걸 발견하고는 열공을 하는 중입니다만, 옵저버패턴을 보더라도 다중상속을 하지 않으면 상당히 불편해집니다. 구현하기가요...

윤성우씨가 다중상속을 삼가야 한다고 하는 주장의 근거는 상속시 간접 경로를 통해 같은 클래스가 두번 상속되는 이상한 구조가 만들어질 수 있기 때문이라고 합니다. 그 해결책으로 물론 virtual 상속을 설명했어요. 그럼에도 불구하고 그 해결책을 믿고 다중상속을 쓰기보다는 아예 다중상속을 사용하지 않는게 좋다고 설명했습니다.

자바에서의 인터페이스를 C++에서 사용하려면 다중상속밖에 없지않나요? 실제 오픈소스에서도 다중상속을 많이 하고있구요...

여러분의 의견이 궁금합니다.

klyx의 이미지

필요하면 써야지요.

ifree의 이미지

얼마나 잘 알고 쓰느냐가 문제일 듯.

semmal의 이미지

서브타이핑과 서브클래싱만 잘 구분해서 쓰면 문제가 안생깁니다.

다중상속의 문제점을 피해가는 방법은 몇가지 있으니 검색해보시면 될 것 같습니다.

하지만, 그런 방법보다 중요한 것은 타입으로 쓰는 클래스와 구현체 모듈로 쓰는 클래스, 이 두 개의 특성을 잘 구분하면 애초에 문제가 발생하지 않습니다.

보통 책이나 자료에서는 이 두 가지를 제대로 구분하지 않기 때문에 헷갈리는 경우가 많습니다.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

jeongheumjo의 이미지

저는 좀 더 공부해서 내공을 더 쌓아야 할 것 같습니다.
그럼 이만..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.