추상 기본 클래스 (Abstract Base Class)
추상 기본 클래스(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!"를 반환하며 예상대로 동작한다.