본문 바로가기
언어/C++

[C++ 기본 공부정리] 17-2. OOP 다형성 - 추상 클래스(abstract class)

by 민-Zero 2020. 1. 10.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 추상 클래스(abstract class)란?

추상이란 단어의 뜻은 '구체성이 없어 그 뜻이 분명하지 않다'이다. 따라서 추상 클래스는 기능이 구체적으로 작성되지 않은 클래스라는 뜻으로 받아들일 수 있다. C++에서 추상 클래스는 하나 이상의 순수 가상 함수(pure virtual function)를 지닌 클래스를 말한다.

이런 추상 클래스를 이용하면 다형성을 가진 다양한 함수들을 정의할 수 있게 도와준다. 제작하고자 하는 객체들이 반드시 지닌 기능을 추상 클래스의 순수 가상 함수로 작성해 놓으면, 해당 클래스를 이용하여 만든 자식 클래스에서는 이 가상 함수를 재정의하여 사용하면 된다. 즉, 추상 클래스는 객체를 생성하기 위한 목적의 클래스가 아니라 상속을 통한 다양한 클래스의 생성을 위한 인터페이스라고 생각하면 된다.

(JAVA 같은 경우 상속과 인터페이스가 extends와 implements로 다른 종류로 구현하지만 C++은 따로 인터페이스 형식을 제공하지 않고 추상 클래스를 통해 인터페이스를 구현한다.)

 

추상 클래스는 기능이 정의되지 않은 순수 가상 함수를 포함하고 있기 때문에 불완전한 클래스로 볼 수 있다. 따라서 추상 클래스에 대한 객체를 생성할 수 없다.

따라서 추상 클래스에게 상속을 받은 자식클래스를 만들고 자식 클래스에서 오버라이딩을 통해 순수 가상 함수를 구현해서 인스턴스화를 진행한다. 추상 클래스 타입의 포인터와 참조는 선언 가능하다.

 

2. 제한 사항

추상 클래스를 이용한 인스턴스화는 진행할 수 없음을 확인하였다. 이것 말고도 몇개의 제한 사항이 존재한다.

  • 함수의 인수로 사용 불가
  • 함수의 반환 타입으로 사용 불가
  • 명시적 변환 형식 불가
  • 일반 변수나 멤버 변수로 사용 불가

이처럼 추상 클래스는 구현되지 않은 부분이 존재하기 때문에 상속 이외에는 제한사항이 많다. 

 

댓글