PYTHON · 객체지향
팩토리 메서드
클래스 메서드를 활용한 팩토리 패턴으로 다양한 방법으로 객체를 생성합니다.
객체지향중급factory팩토리classmethod생성 패턴
핵심 설명
클래스 메서드를 활용한 팩토리 패턴으로 다양한 방법으로 객체를 생성합니다.
Python code
from __future__ import annotations
from dataclasses import dataclass
from datetime import datetime
@dataclass
class User:
name: str
email: str
created_at: str
@classmethod
def create(cls, name: str, email: str) -> User:
return cls(name, email, datetime.now().isoformat())
@classmethod
def from_dict(cls, data: dict) -> User:
return cls(**data)
@classmethod
def guest(cls) -> User:
return cls("Guest", "guest@example.com",
datetime.now().isoformat())
# 다양한 생성 방법
u1 = User.create("Alice", "alice@test.com")
u2 = User.from_dict({"name": "Bob", "email": "bob@test.com",
"created_at": "2024-01-01"})
u3 = User.guest()
for u in [u1, u2, u3]:
print(f"{u.name} ({u.email})")
# 상속에서도 올바르게 동작
class AdminUser(User):
pass
admin = AdminUser.guest()
print(type(admin)) # <class 'AdminUser'>학습 팁
@classmethod 팩토리는 cls를 사용하므로 서브클래스에서도 올바른 타입의 인스턴스를 생성합니다.
주의할 점
@staticmethod로 팩토리를 만들면 클래스명이 하드코딩되어 상속 시 부모 클래스 인스턴스가 생성됩니다.
자주 묻는 질문
팩토리 메서드란 무엇인가요?
클래스 메서드를 활용한 팩토리 패턴으로 다양한 방법으로 객체를 생성합니다.
팩토리 메서드 학습 시 주의할 점은 무엇인가요?
@staticmethod 로 팩토리를 만들면 클래스명이 하드코딩되어 상속 시 부모 클래스 인스턴스가 생성됩니다.