{

상속성을 주의해서 사용해야 하는 이유는 "강력한 관계"는 보다 쉽게 "강력한 상처"를 줄수 있기 때문이다. 상속은 C++ 에서 손에 꼽힐 정도로 강력한 관계를 맺게 해주는 개념이다.


상속을 사용하면, 다음과 같은 이점을 살리기 어려워 진다.

1. 코드의 유연성

A 클래스와 B 클래스가 서로 독립 될 수 있는 경우, 각각의 변경은 서로에게 영향을 미치지 않으므로, 언제 어디서든 A는 B와는 상관 없이, B는 A와 상관없이 사용 될 수 있다.

2. 빠른 컴파일

각각의 변화에 따른 컴파일을 할 필요가 없다. 만약 B 클래스가 A 클래스를 상속해서 구현되었다면, A 클래스의 변화가 있을 때마다 B 클래스 역시 재컴파일 해야 하는 시간을 내놓아야 한다.

3. 적은 혼란

각각 독립적이기 때문에, 한 클래스에만 집중 해도 될 수 있음, 만약 B 클래스가 A 클래스를 상속한다면, 이름 가림 현상, 복사 생성자, 소멸자 처리 등.. 생각해야 할 것이 너무 많아지는 혼란을 겪게 된다.


이러한 이점은 유지/보수에 큰 영향을 미치기 때문에, 상속이 꼭 필요하지 않다면, 쓰지 않는게 "상책" 이다. 몇가지 팁으로 꼭 필요한 경우는 생략하고, 경험적으로 하는 실수만 예를 들겠다., "코드를 재사용하기 위해서 상속을 한다" 말을 많이 듣는데, 상속은 코드의 재사용 때문에 사용하는 기술이 아니다. 

물론 코드의 재사용으로 사용 할 수는 있지만, 좀더 튼튼하고 안전한 재사용 기법(일반화 프로그래밍)이 있기 때문에, 굳이 어려운 상속을 쓰지 않아도 된다. 그러므로 "코드의 재사용을 위해 상속"하는 것을 쓰지 말자.

}

'책 정리 > C++ Coding Standards : C++ 코딩의 정석' 카테고리의 다른 글

항목 39 : 가상 함수는 비공용으로, 공용 함수는 비가상으로 설정하라. ( Consider making virtual functions nonpublic, and public functions nonvirtual. )  (0) 2009.03.30
항목 38 : 안전한 오버라이딩을 연습하라. ( Practice safe overriding. )  (0) 2009.03.02
항목 37 : 상속의 정확한 의미를 이해하자. 재사용을 위해 상속하는 것은 아니지만, 재사용은 필요하다. ( Public inheritance is substitutability. Inherit, not to reuse, but to be reused. )  (0) 2009.03.02
항목 36 : 추상 인터페이스를 활용하라. ( Prefer providing abstract interfaces. )  (0) 2009.03.02
항목 35 : 기반 클래스로 디자인되지 않은 클래스로부터의 상속을 피하라. ( Avoid inheriting from classes that were not designed to be base classes. )  (0) 2009.03.01
항목 33 : 최소화된 클래스를 사용 하라. ( Prefer minimal classes to monolithic classes. )  (0) 2009.02.27
항목 32 : 만들고 있는 클래스가 무엇인지 확실히 하라. ( Be clear what kind of class you’re writing. )  (0) 2009.02.26
항목 31 : 함수의 인자의 처리 순서에 좌우되는 코드는 좋지 않다. ( Don’t write code that depends on the order of evaluation of function arguments. )  (0) 2009.02.26
항목 30 : &&, || 그리고 콤마의 오버로딩은 피하라. ( Avoid overloading &&, ||, or , (comma) )  (0) 2009.02.26
항목 29 : 간접적인 타입 변환을 피하기 위해 오버로딩을 활용하라. ( Consider overloading to avoid implicit type conversions. )  (0) 2009.02.25
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기