Server Development 2007. 11. 13. 22:30
반응형
클래스 설계시 부모클래스와 자식클래스의 인터페이스(선언)과 정의부의 상속에 따라 인터페이스를 다르게 설계해야 합니다.

순수가상함수 virtual void draw() = 0;
가상함수 virtual void error(const std::string& message);
비가상함수 virtual void objectID();

위와 같이 사용을 하게 되는데 결론 부터 이야기 하자면,

1.순수 가상함수는 인터페이스의 상속만을 허용합니다.

순 수 가상함수의 특징은 크게 2가지 입니다. 첫째 어떤 순수 가상 함수를 물려 받은 하위 클래스에서 해당 순수 가상 함수를 반드시! 다시 선언해야 합니다. 순수 가상 함수의 두 번째 특징으로는 부모클래스에서 정의를 갖지 않습니다. 팀 단위 프로젝트에서 "반드시 이 클래스는 그리는 매서드를 지녀야해. 어떻게 그릴지는 차후에 당신이 생각하세요" 라고 설계자가 말하는 것이 됩니다.

2.가상함수는 인터페이스의 상속과 기본 구현의 상속도 가능하도록 지정합니다.
가상함수는 순수가상함수처럼 인터페이스를 상속하게 한다는 점은 같지만 하위 클래스에서 오버라이드(재정의)할 수 있는 구현부도 제공한다는 점이 다릅니다.
가상함수를 만들 설계자가 "error함수는 여러분이 지원해야 한다우. 그러나 굳이 새로 만들 생각이 없다면 추상클래스의 기본버젼을 사용하쇼."  라고 말하는 것입니다. 이는 다소 위험 할 수 있습니다. 코드의 유지/보수 시에 이전에는 필요하지 않던 인터페이스의 재정의 시에 나타납니다. 즉 추후에 추가된 기능을 넣어야 하는데 이를 잊고 그대로 사용하는데도 컴파일러는 아무런 문제를 일으키지 않기 때문입니다.

3.비가상 함수는 인터페이스 상속과 필수 구현의 상속도 가능하도록 하는 것입니다.
설계자는 "추상클래스에 파생된 모든 객체의 식별자를 나타내는 ID가 필요한데 이것을 계산하는 방법은 항상 똑같아"
라고 말하는 것입니다.

지금까지는 추상클래스라고 하더라도 모든 멤버를 비가상함수로 선언했었습니다. 비가상소멸자가 문제를 일으키기도 합니다. 그러니깐 이런것을 잘 알고 사용합시다.
반응형
posted by choiwonwoo
: