프로그래밍/파이썬

추상 기본 클래스 (Abstract Base Class)

깊은대학 2025. 4. 25. 17:50

추상 기본 클래스(ABC, Abstract Base Class)는 코드의 일관성을 유지하고 유지보수성을 향상시키기 위해 사용된다.

추상 기본 클래스는 직접 인스턴스화할 수 없는 특별한 형태의 클래스다. 대신, 이 클래스는 하위 클래스들이 따라야 할 청사진 또는 템플릿으로 작동한다. ABC의 주요 목적은 하위 클래스들이 특정 메서드를 반드시 구현하도록 강제함으로써 클래스 계층 구조의 일관성을 유지하는 것이다.

파이썬에서는 'abc' 모듈을 통해 추상 기본 클래스를 정의할 수 있다. 클래스가 ABC 를 상속받으면, 그 클래스는 추상 클래스가 되어 직접 객체를 생성할 수 없게 된다. 이러한 추상 클래스는 '@abstractmethod' 데코레이터를 사용하여 추상 메서드를 정의한다.

추상 메서드는 이름과 매개변수만 선언되어 있고 실제 구현은 포함하지 않는다. 이 메서드의 구체적인 동작은 추상 클래스를 상속받는 하위 클래스에서 정의해야 한다. 만약 하위 클래스가 이러한 추상 메서드를 모두 구현하지 않으면, 해당 하위 클래스의 인스턴스를 생성하려 할 때 TypeError가 발생한다. 결국 @abstractmethod 로 지정된 메서드는 하위 클래스에서 반드시 구현해야 하므로, 인터페이스와 유사한 역할을 수행한다.

 

 

다음은 추상 클래스를 활용한 간단한 예제 코드다.

 

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        return "Woof!"

class Cat(Animal):
    def make_sound(self):
        return "Meow!"

# Animal 클래스는 추상 클래스이므로 직접 인스턴스화 불가
# animal = Animal()  # TypeError: Can't instantiate abstract class Animal with abstract methods make_sound

dog = Dog()
print(dog.make_sound())  # 출력: Woof!

cat = Cat()
print(cat.make_sound())  # 출력: Meow!

 

 

 

위 예에서 Animal은 추상 클래스이고, make_sound는 추상 메서드다. Animal 클래스는 ABC 를 상속받아 추상 기본 클래스로 정의되었다. make_sound 메서드는 @abstractmethod 데코레이터를 사용하여 추상 메서드로 지정되었다. 이 메서드는 구현이 없고 pass로만 되어 있다.

Dog와 Cat 클래스는 Animal 추상 클래스를 상속받고, 각각 make_sound 추상 메서드를 구현했으므로 인스턴스화 가능하다.

Dog와 Cat 클래스의 인스턴스를 생성하고 make_sound 메서드를 호출하면 dog.make_sound()는 "Woof!", cat.make_sound()는 "Meow!"를 반환하며 예상대로 동작한다.