본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Abstract Class
객체지향 구조에서 하나 이상의 추상 메서드를 포함하는 클래스
  • 공통적으로 사용되는 오퍼레이션의 중복 정의 방지

인터페이스와의 차이

편집 원본 편집
구분 인터페이스(Interface) 추상 클래스(Abstract Class)
목적
  • 설계도
  • 메서드의 강제 구현
  • 미완성 클래스
  • 공동 기능 사용
추상 메서드 보유 보유
일반 메서드 보유 불가능 보유 가능
다중 상속 가능 불가능

표의 '다중 상속' 은 자바 기준이다. 자바는 클래스를 하나만 상속하지만 인터페이스는 여러 개 구현할 수 있다. C++ 은 클래스의 다중 상속을 허용한다.

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 같은 별도 문법이 없다. 순수 가상 함수만 있고 데이터 멤버가 없는 클래스를 관례상 '인터페이스 클래스' 라 부를 뿐이다 → 객체지향 인터페이스