두 부모가 모두 상태를 가진 구체 클래스라면 다이아몬드 문제가 생길 수 있습니다. 인터페이스 구현인지, 상태 공유인지, 합성이 나은지 순서대로 판단합니다.
| 점검 질문 | 위험 신호 | A급 판단 | 선택 |
|---|---|---|---|
| 부모 둘이 같은 기반을 공유하나? | Device 같은 공통 조상이 두 경로에 있음 | 중복 상태가 필요한지 먼저 설명 가능해야 함 | virtual 검토 |
| 부모가 데이터 멤버를 가지나? | id, handle, buffer 같은 상태가 여러 부모에 있음 | 어느 클래스가 초기화할지 명확해야 함 | 책임 분리 |
| 인터페이스만 섞는가? | 구현과 상태까지 함께 물려받음 | 추상 인터페이스 구현이면 상대적으로 안전함 | 다중 구현 가능 |
| 합성이 더 단순한가? | 상속 그래프 설명이 코드보다 어려움 | 멤버 객체로 조합해도 기능 요구를 만족함 | 합성 우선 |
“다중 상속으로 구현할 수 있다”가 아니라 “중복 상태와 생성 책임을 독자가 추적할 수 있다”가 유지 조건입니다.