{

지금까지 상속이 필요하지 않다면, 사용하지 않는게 좋다는 이야기였다면, 이번 항목에서는 상속이 없다면 어려운 것들을 상속을 통해 보다 간단하게 만드는 방법이 있고, 어떻게 만드는 것이 좋은지에 대한 설명이 들어 있었다.

일단 이 책의 내용 중에서, 가장 어렵게 설명한 내용이지 않을까 한다.

어떤 것을 상속을 통해 손쉽게 해결 할 수 있는가?

비유 해서 설명하자면,  개과 동물 들 중에서 Dog 와, Wolf, Dingo, 등이 있다고 하자. 그리고 이 개과 동물들은 "짖는다"라는 행동은 갖으나, 소리가 다르다는 것을 알 수 있을 것이다.

 만약, 내가 개과 동물들의 "짖는다"라는 행동을 보고 싶다면, 각 동물마다 "짖는다" 라는 함수를 호출해야 할 것이다. 이 작업이 여간 힘든게 아니다. 각 동물들은 수십종이 되는데, 다른 행동을 보고 싶다면 그것도 다 직접 호출을 해야 하기 때문이다.

이럴때가 바로 상속을 통해, 추상 인터페이스를 활용 하는 것이다.

class 개과동물 을 만들고, 순수 가상 함수로 virtual bark() = 0; 을 만들어 둔 다음에, 이 개과동물 클래스를 Dog, Wolf, dingo 가 상속하게 만든 후에, 기반 클래스 형의 참조형으로 컨테이너에 담아 두고, bark 만 호출하면 모두 다 짖게 만들 수 있다.

예제 코드


자. 보면 알다 시피 개과동물들이 짖는 것을 볼 수 있을 것이다. 만약 이때, Dingo 는 "캥캥" 이 아니라, "쾽쾽" 이라고 짖게 되면 어떻게 될까?


손쉽게 Dingo 클래스의 bark 에 가서 캥캥을 쾽쾽으로 고쳐 주면 되는 것이다. 이것은 상속을 통한 추상 인터페이스의 사용으로 변화에 유연하게 대처 할 수 있는 것을 보여 준다.

주의 해야 할 사항은 무엇이 있는가?

이런 경우 100%로 소멸자를 공개 가상 함수로 만들어 두어야 한다. 그 이유는 알 것이므로 패스


다른것들은 다 기본적인 것들이라 어렵게 설명할 필요가 없다. 구조상 인터페이스만을 상속해서 사용 하고 싶다면, 추상 인터페이스를 활용 하라~

}


저작자 표시
신고

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

항목 41 : 특징 없는 값의 집합을 제외하고는 모든 데이터 멤버를 사영으로 하라. Make data members private, except in behaviorless aggregates (C-style structs).  (0) 2009.03.31
항목 40 : 간접 변환을 피하라. ( Avoid providing implicit conversions. )  (1) 2009.03.30
항목 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
항목 34 : 상속성을 주의해서 사용하라. ( Prefer composition to inheritance. )  (0) 2009.02.28
항목 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
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요