C++ 공부

인터페이스와 추상클래스의 차이점

Client Side 2025. 9. 2. 19:42

추상클래스와 인터페이스는 비슷해보이지만 차이점이 있다.

 

추상클래스(Abstract class)

  • 클래스처럼 상태(멤버 변수)와 동작(메서드)을 일부 구현할 수 있다.
  • 일부 메서드를 추상 메서드(구현 없이 선언만)로 남겨서, 자식 클래스가 반드시 구현하도록 강제할 수 있다.
  • 직접 인스턴스를 만들 수 없고, 상속받아 기능을 구체화해야 한다.
  • 상태(변수)를 가질 수 있어서, 공통 기능 일부를 공유하기 편하다.


인터페이스(Interface)

  • 구현한 메서드가 없고, 오직 메서드 선언(구조)만 포함한다.
  • 클래스가 여러 인터페이스를 구현할 수 있어서 다중 상속 효과를 낼 수 있다.
  • 상태(변수)를 가질 수 없고, 반드시 모든 메서드를 구현해야 한다.
  • 일종의 약속서 같은 역할로, 클래스가 반드시 제공할 기능을 명시하는 데 사용된다.

 

 

추상클래스는 “기본 뼈대와 일부 완성된 기능”을 주고, 인터페이스는 “해야 할 기능 목록만 쭉” 나열한 것. 

추상클래스는 기본 구현도 같이 줄 수 있지만, 인터페이스는 오직 설계도 역할만 한다.

 

 

 

아래 두개의 예시 중 어떤게 인터페이스고 어떤게 추상클래스일까?

#include <iostream>

class CanFly {
public:
    virtual void fly() = 0; // 순수 가상 함수
    virtual ~CanFly() {}
};

 

 

#include <iostream>

class Animal {
public:
    virtual void makeSound() = 0; // 순수 가상 함수
    void eat() {
        std::cout << "냠냠 먹는 중...\n";
    }
    virtual ~Animal() {}
};