추상 클래스
IT위키
더 많은 작업
- Abstract Class
- 객체지향 구조에서 하나 이상의 추상 메서드를 포함하는 클래스
- 공통적으로 사용되는 오퍼레이션의 중복 정의 방지
| 구분 | 인터페이스(Interface) | 추상 클래스(Abstract Class) |
|---|---|---|
| 목적 |
|
|
| 추상 메서드 | 보유 | 보유 |
| 일반 메서드 | 보유 불가능 | 보유 가능 |
| 다중 상속 | 가능 | 불가능 |
표의 '다중 상속' 은 자바 기준이다. 자바는 클래스를 하나만 상속하지만 인터페이스는 여러 개 구현할 수 있다. C++ 은 클래스의 다중 상속을 허용한다.
C++ 에는 abstract 키워드가 없다. 본문 대신 = 0 을 붙인 순수 가상 함수(pure virtual function)를 하나라도 가진 클래스가 추상 클래스다.
class Shape : public Item, public Object {
public:
virtual void group() = 0; // 순수 가상 함수 → Shape 는 추상 클래스
virtual void ungroup() = 0;
virtual void move(Position x, Position y) = 0;
};
- 추상 클래스로는 객체를 만들 수 없다(
Shape s;는 오류). 상속한 클래스가 순수 가상 함수를 모두 재정의해야 객체를 만들 수 있다 - 본문 없이 선언만 한 위 세 줄은 멤버 함수의 원형(prototype)이다
- 위 클래스는 부모가 Item·Object 둘이므로 다중 상속이기도 하다
- C++ 에는 자바의 interface 같은 별도 문법이 없다. 순수 가상 함수만 있고 데이터 멤버가 없는 클래스를 관례상 '인터페이스 클래스' 라 부를 뿐이다 → 객체지향 인터페이스