2017년 11월 21일 화요일

순수 가상 함수(Pure Virtual Function)

순수 가상 함수 (Pure Virtual Function)

가상함수는 파생 클래스가 재정하여 사용할 수 있는 함수.
상속관계의 두 클래스 중 파생 클래스는 기반 클래스의 가상함수를 재정의 할 수 있음.
기반 클래스의 동작 그대로 사용할 수도 있음. 변경할 필요가 있을 때만 재정의.

순수가상함수는 파생 클래스에서 반드시 재정의해야함.
일반적으로 순수가상함수는 함수의 동작을 정의하는 본체를 가지지 않기 때문에 재정의 없이는 호출도 불가능.
보통 함수 선언부 끝에 =0이라는 표기로 순수 가상 함수임을 표시. (함수만 있고 코드는 비어있다는 뜻)
하나 이상의 순수 가상 함수를 가지는 클래스를 추상 클래스(Abstract class)라고 함.
추상 클래스는 동작이 정의되지 않은 멤버 함수를 갖고 있기 때문에 이 상태로는 인스턴스를 생성할 수 없음.
추상 클래스의 반대 개념은 구체 클래스(Concrete class).
추상 클래스는 그 자체로는 인스턴스(객체)도 생성하지 못하고 동작도 없지만 추상클래스의 존재의미는 구체 클래스의 공동의 조상이 되어 여러 객체들의 집합을 관리하기 위함임.

즉, 추상클래스는 구체 클래스들의 상징적인 공동의 조상으로 존재가치가 있음.
파생 클래스는 자신이 상속받은 추상 클래스의 순수 가상 함수를 반드시 재정의 해야 인스턴스를 생성할 수 없다. 추상 클래스는 구체 클래스에게 필요한 기능의 목록과 원형만 정의 하고 실제 구현은 파생 클래스가 재정의해야 함.
이때 추상 클래스가 정의하는 기능 목록을 인터페이스라고 함.
추상 클래스의 순수 가상 함수는 어떠한 동작이 필요하다 정도만 표현할 뿐 통상 =0으로 표기하고 구체적인 동작을 기술하는 본체는 가지지 않지만 원한다면 순수 가상 함수도 본체를 가질 수 는 있음. 파생 클래스가 동작하는데 공통적으로 필요한 구현이 있다면 순수 가상 함수에 이 코드를 미리 작성해 넣을 수 있음.

순수 가상함수의 본체는 추상 클래스 자신을 위한 것이 아니라 파생 클래스들이 공통적으로 쓸 수 있는 서브루틴을 제공하는 의미밖에 없음.

댓글 없음:

댓글 쓰기