본문 바로가기
프로그래밍/공부

[C++] 추상클래스 and 인터페이스

by Sik.K 2022. 12. 12.

추상클래스와 인터페이스는 무엇일까.

 

이를 알기 위해서는 우선 순수가상함수라는 것을 알아야 한다.

 

https://eunsikk.tistory.com/5

 

[C++] 가상함수 & 순수가상함수

클래스는 내부의 멤버로 변수, 구조체, 함수 등을 가질 수 있다. 이 때, 함수를 정의하고 이를 자식 클래스에서 같은 이름, 같은 매개변수의 함수를 사용하기 위해서는 어떻게 해야 할까? 이 경우

eunsikk.tistory.com

 

여기서 설명했듯이 순수가상함수는 반드시 자식 클래스에서 재정의가 이뤄져야 하는 가상함수이다. 그리고 이 순수가상함수가 하나라도 포함이 되어 있다면 그것을 바로 추상클래스라고 부른다.

 

추상클래스의 특징은 바로 객체화가 불가능하다는 것이다. 순수가상함수는 오로지 상속에 사용하기 위한 용도이기 때문에 순수가상함수를 멤버로 가지고 있는 추상클래스는 객체로 선언이 불가능하다.

class Basic
{
public:
	virtual ~Basic();

	virtual void Print() = 0;
	void Input();
}

Basic a; // 이 경우에 Basic 클래스의 객체는 선언될 수 없다.

 

그렇다면 인터페이스는 무엇일까?

 

간단하게 말하면 가상 소멸자와 순수가상함수만을 가지고 있는 클래스를 인터페이스라고 부른다.

 

class Basic
{
public:
	virtual ~Basic();
    
    	virtual void Print() = 0;
    	virtual void Input() = 0;

}

 

또한 인터페이스에는 반드시 가상 소멸자가 포함되어야 한다. 가상 소멸자는 상속 받은 자식 클래스가 삭제될 때 올바른 소멸자를 호출할 수 있는 역할을 하기 때문이다.

 

 

그렇다면 추상클래스와 인터페이스는 어떤 점이 다를까?

 

 

1. 인터페이스는 상태나 구현(변수&함수)을 포함할 수 없는 반면, 추상 클래스는 포함할 수 있다.

 

2. 인터페이스를 구현하는 클래스는 해당 인터페이스가 가져야 하는 모든 메소드를 구현해야하는 반면, 추상 클래스는 추상 메소드를 구현하지 않고 상속될 수 있다.

 

3. 인터페이스는 다중 상속일 수 있지만 추상 클래스는 단일 상속만 가능하다.

 

4. 추상 클래스는 구성 요소를 쉽고 간단하게 버전화 할 수 있는 방법을 제공하는 반면, 인터페이스는 한 번 생성되면 변경될 수 없기 때문에 인터페이스의 새로운 버전이 필요한 경우 완전히 새로운 인터페이스를 생성해야한다.

 

5. 추상 클래스는 주로 밀접하게 관련된 클래스에 사용되어야 하는 반면, 인터페이스는 관련 없는 클래스에 공통된 기능을 제공하는 데 가장 적합하다.

 

 

 

 

'프로그래밍 > 공부' 카테고리의 다른 글

[C++] 싱글턴 패턴  (0) 2022.12.13
[C++] 정적(Static) 변수  (0) 2022.12.13
[C++] 비트 연산자  (0) 2022.12.13
[그래픽스] 더블 버퍼링(Double Buffering)  (0) 2022.12.12
[C++] 가상함수 & 순수가상함수  (0) 2022.12.12

댓글