라떼군 이야기


5 / 13강

팩토리: 만드는 책임을 분리하기

보고서를 내보내는 절차는 같지만, 출력 형식은 텍스트 또는 다른 형식으로 달라질 수 있습니다. 팩토리 메서드는 객체를 만드는 단계를 하위 클래스에서 바꿀 수 있도록 합니다.

공통 절차에서 생성 메서드를 부릅니다

class TextExporter:
    def render(self, text):
        return "TEXT: " + text

class ExportJob:
    def create_exporter(self):
        raise NotImplementedError
    def run(self, text):
        return self.create_exporter().render(text)

class TextExportJob(ExportJob):
    def create_exporter(self):
        return TextExporter()

print(TextExportJob().run("weekly report"))

출력은 TEXT: weekly report입니다. ExportJob은 렌더링 절차를 담당하고, TextExportJob은 어떤 내보내기 객체를 만들지 정합니다. 새로운 하위 클래스는 create_exporter를 바꾸어 다른 객체를 제공할 수 있습니다.

비슷한 이름을 구분합니다

Python에서는 생성 함수를 인자로 전달하는 더 작은 설계로 충분할 수도 있습니다. 객체 하나를 만들기 위해 불필요하게 많은 계층을 만들 필요는 없습니다.

확인 문제

밝은 테마 버튼과 밝은 테마 입력 상자가 반드시 함께 만들어져야 합니다. 어떤 팩토리의 목적과 더 가까울까요?

해설 보기

서로 관련된 제품 가족을 만드는 추상 팩토리의 목적에 가깝습니다. 다만 필요한 기능이 작다면 함수나 작은 객체로도 그 일관성을 지킬 수 있습니다.

제품 기획, 개발 파트너 찾으시나요? 개인, 팀, 기업 모두 환영. 문제 정의부터 출시까지 함께합니다.