{

이 글의 취지는 무엇인가? 

상속을 잘못되게 사용하지 말라는 것이다.


상속의 정확한 의미가 무엇일까?

상속은 말 그대로, 이어 받는 것을 말하는데, C++에선 상속해 주는 녀석의 행동을 이어 받는 것이다. 그래서 "is-a" 관계라 든지 "works-like-a" 라든지 상속은 이런 관계일 때만 해야 한다고 한다.

is-a 관계 :
B is a A 라는 관계인데, B가 A로 봐도 무리가 없다면, 상속을 해도 된다.(물론 상속을 하지 않아도 된다면 하지 않는게 좋다)

works-like-a 관계 :
B works like a A 라는 관계인데, B가 A 처럼 행동해야 할때, 상속을 해도 된다. 물론~ 하지 않아도 되면, 하지 않는게 좋다.


상속으로 코드의 재사용을 하면 안되는 이유가 무엇인가?

상속은 대체성을 위해서 사용 하는 것인데, 이 대체성은 class B : public A 관계 일 때, B가 A로 대체될 수 있는 것을 의미한다. 만약 A의 특정 코드만을 사용하기 위하여 상속을 사용 한다면, 대체성 관계가 성립되지 않는 상태에서 자칫 디자인이 꼬여 버리거나, 알수 없는 에러를 벹어 낼 수가 있다.

C++에서 상속은 대체성을 위해서 만들어 진것이기 때문에, B가 A처럼 행동하면 안되는데도, 문법적 오류를 벹어내지도 않으며, 디자인적 결함을 찾기도 힘들어 지므로, 전체적으로 디버깅이 어려워 진다.

코드를 재사용하고 싶다면 어떻게 해야 하는가?

템플릿이나, has-a 관계 를 사용하는게 좋을 것이다.


이것 때문에 어떤 나쁜 경험을 해 보았는가?

대체적으로 나는 코드를 재사용하기 위해서 상속을 써 본일이 없기 때문에, 잘 모르겠다. 나중에 겪게 될 것 같은 느낌이 팍팍 드는데, 그 때 다시 기회가 되면 정리하겠다.

}

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기