추상 클래스(Abstract Base Class, ABC)는 「자기는 직접 인스턴스를 만들 수 없고, 자식 클래스가 반드시 구현해야 할 메서드를 명시하는」 클래스입니다.
「이 클래스를 상속받으려면 이 메서드들은 꼭 구현해야 한다」는 강제력을 부여합니다.
기본 사용.
from abc import ABC, abstractmethod.
class Animal(ABC): @abstractmethod; def speak(self): pass.
class Dog(Animal): def speak(self): print("멍멍").
Animal()을 시도하면 「추상 메서드를 구현하지 않은 채 인스턴스화하려 함」 오류.
Dog는 speak를 구현했으므로 OK.
왜 필요한가?
큰 프로젝트에서 「플러그인 시스템」, 「전략 패턴」 같은 곳에 유용합니다.
새로운 결제 수단을 추가할 때 「PaymentMethod 추상 클래스를 상속하고 process() 메서드를 반드시 구현하라」는 약속을 강제할 수 있습니다.
비유하자면 ABC는 「건축 설계도 표준」과 같습니다.
「모든 집은 입구·창문·지붕이 있어야 한다」는 규격을 정해 두면, 실제 집을 짓는 건축가는 그 규격을 따르지 않으면 「이건 집이 아닙니다」 판정이 납니다.
코드의 일관성을 보장하는 도구입니다.
더 가벼운 대안으로 「Protocol」(typing.Protocol)이 있습니다.
명시적 상속 없이 「이 메서드들을 가지고 있으면 이 타입으로 본다」는 「덕 타이핑 + 타입 힌트」 결합입니다.
ABC가 「엄격한 계약」이라면 Protocol은 「유연한 약속」 — 작은 코드에서는 Protocol이, 큰 프레임워크에서는 ABC가 자주 쓰입니다.
한 줄 요약
ABC는 「자식이 반드시 구현해야 할 메서드를 강제하는」 추상 클래스입니다.
플러그인·전략 패턴에서 일관성 보장에 유용하며, Protocol은 더 유연한 대안입니다.
더 알아볼 것
- abstractmethod의 동작 원리
- collections.abc — 표준 ABC들
- Protocol vs ABC