728x90
안녕하세요.
오늘은 abc 모듈과 @abstractmethod 로 추상클래스를 만들어보겠습니다.
프로젝트 규모가 커지면서 특정 클래스를 상속받는 자식 클래스에 필수 메서드를 강제하고 싶을 때가 있습니다.
이럴때 abc 모듈을 활용하여 추상클래스를 만들 수 있습니다.
ABC (Abstract Base Class)
abc 모듈에서 가져오는 클래스입니다.
이 클래스를 상속받으면 해당 클래스는 "추상 클래스"가 됩니다.
특징: 추상 클래스는 그 자체로는 객체(인스턴스)를 생성할 수 없습니다.
오직 상속을 위한 부모 역할만 합니다.
@abstractmethod
메서드 위에 붙이는 데코레이터입니다.
이게 붙은 메서드는 "껍데기" 뿐이고, 내용은 비워둡니다(pass).
규칙: 부모 클래스에서 이 데코레이터가 붙은 메서드는, 자식 클래스에서 반드시오버라이딩하여 구현해야 합니다.
구현하지 않으면 에러가 발생합니다.
예제
from abc import ABC, abstractmethod
# 1. 추상 클래스 정의 (설계도 역할)
class Notification(ABC):
@abstractmethod
def send(self, message):
"""이 메서드는 자식 클래스에서 무조건 구현해야 합니다."""
pass
# 2. 자식 클래스 구현 (이메일)
class EmailNotification(Notification):
def send(self, message):
print(f"[이메일 전송] {message}")
# 3. 자식 클래스 구현 (SMS)
class SMSNotification(Notification):
def send(self, message):
print(f"[SMS 전송] {message}")
email = EmailNotification()
email.send("안녕하세요, 회원가입을 축하합니다.")
sms = SMSNotification()
sms.send("인증번호는 [1234]입니다.")
class NoSendNotification(Notification):
# send 메서드를 구현하지 않음! (오류예시)
pass
# 객체 생성 시도
test = NoSendNotification()
결과
[이메일 전송] 안녕하세요, 회원가입을 축하합니다.
[SMS 전송] 인증번호는 [1234]입니다.
Traceback (most recent call last):
File "파일경로", line 32, in <module>
test = NoSendNotification()
TypeError: Can't instantiate abstract class NoSendNotification without an implementation for abstract method 'send'
'Python' 카테고리의 다른 글
| [Python] uuid로 고유한 식별자(Unique ID) 만들기 (0) | 2025.11.25 |
|---|---|
| [Python] isinstance()로 변수 타입 확인하기 (0) | 2025.11.23 |
| [Python] Pydantic 라이브러리 BaseModel 클래스 - 데이터 유효성 검사 (0) | 2025.11.19 |
| [Python] timeit 활용해서 코드 실행 속도 비교하기 (0) | 2025.11.18 |
| [Python] hasattr() 함수로 객체 속성 안전하게 확인하기 (0) | 2025.11.16 |