• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

궁금 합니다

21.02.25 14:33 작성 조회수 154

0

상속을 할수있다면 이전 강의에서 설명해주신 구성 ,집합 관계 처럼 설계를 하지않고 다 상속 해주면 더 좋은것 아닌가요? 상속을 할수있는데 구성,집합 ,의존등 관계를 써서 설계를 하는 이유가 따로 있나요?

(그냥 강의 듣다가 문득 생각이 들어서 질문 남깁니다)

답변 1

답변을 작성해보세요.

6

안소님의 프로필

안소

2021.02.25

상속이 언제나 좋은 것은 아니에요! 상속을 하면 부모 클래스에 있는 모든 것을 물려받게 되죠. 선택적으로 원하는 것만 상속 받을 수는 없습니다. 

내가 사용하지 않을, 사용할 일이 없는 부분인데도 부모로부터 다 상속받아서 가지고 있으면 메모리상 비효율적이겠죠? 사람은 짖을 일이 없는데도 불구하고 사람 클래스가 강아지 클래스를 상속받으면 불필요하게 짖는 기능을 가지고 있어야 겠죠. 쓸 일도 없을텐데요! 그래서 상속을 하는게 좋을지 아닐지는 경우에 따라 다릅니다. 서로 전혀 다른 별개의 클래스로서 두고 필요한 부분만 구성,집합,의존 같은 '관계' 정도만 맺는게 더 나을 때도 있겠습니다.

상속은 말그대로 '상속'이라 A Has B 의 관계이기 때문에(혹은 A Is a B) A클래스가 B 클래스의 모든 부분을 "공통적"으로 포함 하고 있을 때만 A 클래스가 B 클래스를 상속받도록 하는게 효율적이겠죠. 예를 들어 '버스'라는 개념은 '교통 수단' 개념을 모두 가지고 있겠죠. 이럴 경우엔 버스 클래스를 교통 수단 클래스로부터 상속받게 하는게 낫겠죠. 버스는 곧 교통수단이니까요. 버스는 교통 수단의 특성과 기능들을 모두 사용할 수 있으니 교통 수단 클래스를 상속 받는게 낫겠습니다. 그러나 '버스'라는 개념이 '운전사'라는 개념을 포함할 수 있을까요? 버스의 특성이 곧 운전사의 특성 또한 가지게 되는 것은 말이 되지 않습니다. 이런 경우엔 상속 관계가 어울리지 않겠죠. 이땐 상속이 아니라 버스 클래스와 운전사 클래스를 별개로 두고 구성,집합,의존 같은 관계들을 맺게 하는게 낫지 않을까요? 상속도 구성,집합,의존 같은 관계 종류 중 하나일 뿐이라고 생각해주시면 됩니다!

구체적인 예를 들어서 설명해주신점 감사합니다 확실히 이해했습니다