본문 바로가기

언어/Java

[ Java ] Factory Pattern 팩토리 패턴이란?

반응형

팩토리 패턴이란?

팩토리 패턴(Factory Pattern)은 객체 생성 로직을 캡슐화하여 코드의 확장성과 유지 보수성을 높이는 디자인 패턴 중 하나입니다. 팩토리 패턴은 객체 생성을 위한 인터페이스를 정의하고, 실제 인스턴스 생성을 하위 클래스에서 처리하도록 합니다. 이를 통해 클라이언트 코드에서 객체 생성 방식을 숨기고, 코드의 유연성을 높일 수 있습니다.

팩토리 패턴의 주요 특징

  1. 객체 생성 로직을 캡슐화: 객체 생성을 클라이언트 코드에서 분리하여 관리할 수 있습니다.
  2. 확장성: 새로운 객체 타입을 추가할 때 기존 코드를 수정할 필요 없이 확장할 수 있습니다.
  3. 유지 보수성: 코드가 복잡해지더라도 생성 로직이 캡슐화되어 있어 유지 보수하기 쉽습니다.

자바로 팩토리 패턴 예제

예제로, 다양한 타입의 Car 객체(예: Sedan, SUV)를 생성하는 팩토리를 구현해 보겠습니다.

  1. 인터페이스 정의: Car 인터페이스를 정의하여 모든 차종이 구현해야 할 공통 메서드를 명시합니다.
  2. 구체적인 클래스: SedanSUV 클래스가 Car 인터페이스를 구현합니다.
  3. 팩토리 클래스: CarFactory 클래스는 필요한 Car 객체를 생성해주는 역할을 합니다.

코드 예제

// 1. Car 인터페이스 정의
interface Car {
    void drive();
}

// 2. 구체적인 Car 클래스들
class Sedan implements Car {
    @Override
    public void drive() {
        System.out.println("Driving a Sedan.");
    }
}

class SUV implements Car {
    @Override
    public void drive() {
        System.out.println("Driving an SUV.");
    }
}

// 3. 팩토리 클래스 정의
class CarFactory {
    // 팩토리 메서드: 필요한 Car 객체를 반환
    public static Car createCar(String type) {
        switch (type) {
            case "Sedan":
                return new Sedan();
            case "SUV":
                return new SUV();
            default:
                throw new IllegalArgumentException("Unknown car type: " + type);
        }
    }
}

// 4. 사용 예제
public class Main {
    public static void main(String[] args) {
        Car sedan = CarFactory.createCar("Sedan");
        sedan.drive();  // Output: Driving a Sedan.

        Car suv = CarFactory.createCar("SUV");
        suv.drive();  // Output: Driving an SUV.
    }
}

코드 설명

  1. Car 인터페이스는 모든 차 클래스가 구현해야 하는 drive() 메서드를 정의합니다.
  2. SedanSUV 클래스는 Car 인터페이스를 구현하여 각각의 drive() 메서드를 제공합니다.
  3. CarFactory 클래스는 createCar() 메서드를 통해 요청된 타입의 Car 객체를 생성하여 반환합니다.
  4. Main 클래스에서는 팩토리 패턴을 사용하여 SedanSUV 객체를 생성하고, 각각의 drive() 메서드를 호출합니다.

이 패턴을 사용하면 새로운 차종을 추가할 때, 기존 코드를 수정할 필요 없이 새로운 클래스를 만들고 팩토리 메서드를 업데이트하기만 하면 됩니다.

반응형