ABC와 Protocol
학습 목표
ABC와abstractmethod로 추상 클래스를 정의할 수 있다Protocol로 구조적 서브타이핑을 구현할 수 있다- ABC(명목적)와 Protocol(구조적) 서브타이핑의 차이를 이해한다
왜 중요한가
인터페이스 설계는 대규모 프로젝트에서 코드의 계약(Contract)을 명확히 하는 핵심 도구입니다. ML 프레임워크에서Dataset의 __getitem__과 __len__을 반드시 구현해야 하는 것이 바로 인터페이스 강제의 예입니다.
ABC (Abstract Base Class)
ABC는 상속을 통해 인터페이스를 강제합니다 (명목적 서브타이핑, Nominal Subtyping).추상 프로퍼티
Protocol (Python 3.8+)
Protocol은 상속 없이 구조만으로 타이핑합니다 (구조적 서브타이핑, Structural Subtyping). “덕 타이핑(Duck Typing)의 타입 힌트 버전”입니다.ABC vs Protocol 비교
| 특성 | ABC | Protocol |
|---|---|---|
| 서브타이핑 | 명목적 (상속 필요) | 구조적 (상속 불필요) |
| 강제 방식 | 상속 + abstractmethod | 메서드 시그니처만 일치 |
| 런타임 검사 | isinstance 자동 지원 | @runtime_checkable 필요 |
| 유연성 | 낮음 (상속 관계 고정) | 높음 (느슨한 결합) |
| 적합 사례 | 프레임워크 내부 설계 | 라이브러리 간 호환성 |
AI/ML에서의 활용
언제 ABC를, 언제 Protocol을 사용하나요?
언제 ABC를, 언제 Protocol을 사용하나요?
프레임워크 내부에서 상속 계층을 설계할 때는 ABC를, 외부 코드와의 호환성이나 느슨한 결합이 필요할 때는 Protocol을 사용합니다. 새 프로젝트에서는 Protocol을 먼저 고려하세요.
Protocol은 성능에 영향이 있나요?
Protocol은 성능에 영향이 있나요?
@runtime_checkable을 사용한 isinstance 검사는 약간의 오버헤드가 있지만, 일반적인 타입 힌트로의 사용은 런타임 성능에 영향이 없습니다 (정적 분석 전용).체크리스트
-
ABC와abstractmethod로 추상 클래스를 정의할 수 있다 -
Protocol로 구조적 서브타이핑을 구현할 수 있다 - ABC와 Protocol의 차이점을 설명할 수 있다

