🔍 심플 팩토리 (Simple Factory)
▶️ 심플 팩토리란?
심플 팩토리는 가장 단순한 형태의 Factory 패턴으로, 객체 생성 역할을 전담하는 하나의 클래스를 만들어서 객체 생성 로직을 한 곳에서 관리하는 디자인 패턴이다.
즉, 클라이언트 코드에서 객체를 생성(new)하는 대신, 공장 클래스(Factory)를 통해 객체를 생성하고, 공장 클래스는 요청을 받은 객체를 생성해 반환하는 것이다.
심플 팩토리는 다양한 객체 생성 방식 중 가장 간단한 형태이다.
🔑 예제 코드
▶️ 심플 팩토리 적용 전(before)
자동차(Car) 객체를 생성하는 팩토리 클래스 예제를 알아보자.
공통 인터페이스인 Car와 구현체인 SUV, Truck을 만들었다.
// Car 인터페이스
public interface Car {
void drive();
}
// SUV 클래스
public class SUV implements Car {
@Override
public void drive() {
System.out.println("SUV is driving.");
}
}
// Truck 클래스
public class Truck implements Car {
@Override
public void drive() {
System.out.println("Truck is driving.");
}
}
만약 심플 팩토리를 활용하지 않으면 아래와 같이 클라이언트 코드에서 SUV와 Truck의 객체를 생성해야 한다.
SUV suv = new SUV();
Truck truck = new Truck();
해당 방식은 클라이언트와 구현 클래스 간의 강한 의존성을 발생시킨다. 따라서 클래스의 생성자나 전처리 코드가 변경되면 클라이언트 코드까지 변경해야 한다는 문제가 발생한다.
▶️ 심플 팩토리 적용 후(after)
심플 팩토리 적용을 위해 CarFactory라는 객체 생성 로직을 생성했다.
// CarFactory 클래스
public class CarFactory {
public static Car createCar(String type) {
switch (type) {
case "suv":
return new SUV();
case "truck":
return new Truck();
default:
throw new IllegalArgumentException("Unknown car type");
}
}
}
이후 클라이언트 코드에서는 팩토리를 통해 객체를 생성하면 된다.
생성 메서드인 CarFactory.createCar()를 통해 각각의 자동차 객체를 생성할 수 있으며, 각 자동차에 대한 직접적인 의존성이 사라진다. 즉, SUV, Truck 클래스에 대해 알 필요가 없으며 팩토리 클래스만 알고 있으면 된다.
// Main 클래스 (클라이언트)
public class Main {
public static void main(String[] args) {
// 팩토리를 통해 객체 생성
Car car = CarFactory.createCar("suv");
car.drive(); // "SUV is driving."
}
}
💣 심플 팩토리의 한계
심플 팩토리는 클라이언트와 구현 클래스 간의 의존성을 줄이고, 객체 생성 로직을 하나의 클래스에 집중화하여 유지보수성을 높이고 확장성을 개선하는데 용이하다.
하지만, 객체가 추가되는 경우 Factory 클래스의 생성 메서드(createCar)가 수정되어야 하므로, 변경에는 닫혀 있어야 한다는 OCP 원칙에 위배된다.
예를 들어 Sedan이라는 자동차 구현 클래스가 추가된다고 하면, 아래와 같이 createCar의 switch 문에 Sedan을 추가해줘야 한다.
// CarFactory 클래스
public class CarFactory {
public static Car createCar(String type) {
switch (type) {
case "suv":
return new SUV();
case "truck":
return new Truck();
case "sedan":
return new Sedan();
default:
throw new IllegalArgumentException("Unknown car type");
}
}
}
이러한 심플 팩토리의 한계를 극복하기 위해 팩토리 메서드(Factory Meethod), 추상 팩토리(Abstrack Factory) 등 다양한 패턴이 존재한다.
팩토리 메서드 패턴에 대해 추가로 알고 싶다면 하단의 링크를 참고하길 바란다.
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 팩토리 패턴(3) - 추상 팩토리 (Abstract Factory) 패턴 (1) | 2025.01.13 |
---|---|
[디자인 패턴] 팩토리 패턴(2) - 팩토리 메서드(Factory Method) 패턴 (0) | 2024.12.31 |
[디자인 패턴] 템플릿 메서드(Template Method) 패턴 (2) | 2024.12.19 |