팩토리 메서드

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.03
조회수
6
버전
v1

팩토리 메서드

개요

팩토리 메서드( Method)는 소프트웨 설계 패턴 중 생성 패턴(Creational Pattern)에 속하는 대표적인 패턴 중입니다. 이 패은 객체 생성을 서브클래스 위임함으로, 객체 생성 과정 유연성과 확장성을이는 데 목적이 있습니다. 팩토리 메서드 패턴은 객체를 직접 생성하는 대신, 생성 로직을 추상화하여 클라이언트 코드가 구체적인 클래스에 종속되지 않도록 설계합니다.

이 패턴은 객체 지향 프로그래밍에서 의존성 역전 원칙(Dependency Inversion Principle)과 개방-폐쇄 원칙(Open-Closed Principle)을 따르는 데 유용하며, 특히 다양한 타입의 객체를 생성해야 하는 시스템에서 자주 사용됩니다.


팩토리 메서드의 목적

팩토 메서드 패턴은 다음과 같은 문제를 해결하기 위해 고안되었습니다:

  • 객체 생성 코드가 여러 곳에 중복되어 유지보수가 어려움.
  • 새로운 객체 타입을 추가할 때 기존 코드를 수정해야 하는 상황.
  • 클라이언트 코드가 구체 클래스에 강하게 결합되어 유연성이 떨어짐.

이를 해결하기 위해, 팩토리 메서드는 객체 생성을 위한 인터페이스를 정의하고, 실제 생성은 서브클래스에서 결정하도록 합니다. 즉, 어떤 클래스의 인스턴스를 만들지는 런타임에 결정되며, 상위 클래스는 추상적인 방식으로 객체를 생성합니다.


패턴 구조

팩토리 메서드 패턴은 주로 다음의 구성 요소들로 이루어집니다:

1. Product (제품)

생산될 객체의 인터페이스 또는 추상 클래스입니다.

public abstract class Product {
    public abstract void use();
}

2. ConcreteProduct (구체적 제품)

Product를 구현하는 구체적인 클래스들입니다.

public class ConcreteProductA extends Product {
    @Override
    public void use() {
        System.out.println("Product A 사용");
    }
}

public class ConcreteProductB extends Product {
    @Override
    public void use() {
        System.out.println("Product B 사용");
    }
}

3. Creator (생산자)

팩토리 메서드를 정의하는 추상 클래스 또는 인터페이스입니다. 객체 생성 로직을 포함하지만, 구체적인 생성은 추상 메서드로 위임합니다.

public abstract class Creator {
    // 팩토리 메서드
    public abstract Product factoryMethod();

    // 비즈니스 로직 (공통 로직)
    public void someOperation() {
        Product product = factoryMethod();
        product.use();
    }
}

4. ConcreteCreator (구체적 생산자)

Creator를 상속받아 [factoryMethod](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%EC%84%A4%EA%B3%84%ED%8C%A8%ED%84%B4/%ED%8C%A9%ED%86%A0%EB%A6%AC%20%EB%A9%94%EC%84%9C%EB%93%9C/factoryMethod)()를 구체적으로 구현합니다. 이 클래스에서 어떤 ConcreteProduct를 생성할지 결정됩니다.

public class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

public class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}


사용 예시

다음은 팩토리 메서드 패턴이 실제로 어떻게 활용되는지 보여주는 간단한 예시입니다.

public class Client {
    public static void main(String[] args) {
        Creator creatorA = new ConcreteCreatorA();
        Creator creatorB = new ConcreteCreatorB        creatorA.someOperation(); // "Product A 사용"
        creatorB.someOperation(); // "Product B 사용"
    }
}

이 예제에서 ClientConcreteProduct의 구체적인 클래스를 알 필요 없이, Creator 인터페이스를 통해 객체를 사용할 수 있습니다. 새로운 제품을 추가하려면 새로운 ConcreteProductConcreteCreator를 추가하기만 하면 되며, 기존 코드는 수정하지 않아도 됩니다.


장점

  • 확장성: 새로운 제품을 추가할 때 기존 코드를 수정하지 않아도 됩니다 (개방-폐쇄 원칙 준수).
  • 결합도 감소: 클라이언트는 구체 클래스가 아닌 추상 클래스에 의존하므로 결합도가 낮아집니다.
  • 유지보수 용이: 객체 생성 로직이 한 곳(또는 계층 구조)에 집중되어 코드 관리가 쉬워집니다.

단점

  • ⚠️ 복잡성 증가: 단순한 객체 생성에 비해 클래스 수가 늘어나 설계가 복잡해질 수 있습니다.
  • ⚠️ 과도한 추상화: 객체 생성이 간단한 경우 팩토리 메서드 패턴을 사용하면 오히려 오버엔지니어링이 될 수 있습니다.

관련 패턴

  • 추상 팩토리(Abstract Factory): 여러 관련 객체를 생성하는 인터페이스를 제공합니다. 팩토리 메서드보다 더 복잡한 계층 구조를 가집니다.
  • 싱글턴(Singleton): 생성된 인스턴스가 하나만 존재해야 할 때 사용됩니다. 팩토리 내에서 싱글턴 인스턴스를 반환할 수 있습니다.
  • 빌더(Builder): 복잡한 객체를 단계별로 생성할 때 사용되며, 생성 과정의 세부 사항을 클라이언트로부터 분리합니다.

참고 자료


팩토리 메서드 패턴은 객체 지향 설계의 핵심 원칙을 실현하는 데 매우 유용한 도구입니다. 특히 대규모 시스템에서 객체 생성의 일관성과 유연성을 확보하기 위해 적극적으로 활용될 수 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?