책 정리/C++ Coding Standards : C++ 코딩의 정석

항목 36 : 추상 인터페이스를 활용하라. ( Prefer providing abstract interfaces. )

최익필 2009. 3. 2. 10:20

{

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

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

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

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

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

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

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

예제 코드


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


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

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

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


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

}