팩토리 패턴(Factory Pattern)은 객체 생성 로직을 별도의 클래스나 메서드로 분리해서 캡슐화하는 디자인 패턴입니다. 객체 생성 방법을 코드에서 직접 명시하지 않고, 생성 책임을 팩토리(Factory)에 위임함으로써 유연하고 확장 가능한 코드를 작성할 수 있습니다.
---
💡 쉽게 말해:
팩토리 패턴은 **"객체를 직접 만들지 말고, 공장에 시켜서 만들어 쓰자"**는 개념입니다.
---
✅ 예시 상황:
예를 들어 Shape 인터페이스를 구현한 Circle, Square 클래스가 있다고 할 때, 직접 생성하면 이렇게 됩니다:
Shape s1 = new Circle();
Shape s2 = new Square();
이 방식은 나중에 새로운 도형이 추가되면, 객체 생성 코드를 일일이 수정해야 합니다.
팩토리 패턴을 쓰면:
Shape s1 = ShapeFactory.createShape("circle");
Shape s2 = ShapeFactory.createShape("square");
ShapeFactory가 내부에서 적절한 클래스를 결정해서 객체를 반환합니다.
---
✅ 장점
객체 생성 코드와 비즈니스 로직 분리
코드의 유연성과 확장성 증가
클래스 이름을 직접 알 필요 없이 사용 가능
---
✅ 코드 예시 (Java)
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("원 그리기");
}
}
class Square implements Shape {
public void draw() {
System.out.println("사각형 그리기");
}
}
class ShapeFactory {
public static Shape createShape(String type) {
if (type.equalsIgnoreCase("circle")) {
return new Circle();
} else if (type.equalsIgnoreCase("square")) {
return new Square();
}
throw new IllegalArgumentException("Unknown shape type");
}
}
---
✅ 사용 예 (Spring에서의 적용)
BeanFactory 또는 ApplicationContext도 스프링에서 팩토리 패턴의 응용
전략 패턴과 함께 @Component, @Autowired, @Qualifier 등을 이용해서 동적으로 빈을 선택할 때도 유사한 개념 사용
'Spring & Backend' 카테고리의 다른 글
| 자바에서 Object 타입인 value를 String으로 타입 캐스팅하는 것과 String.valueOf()를 사용하는 것의 차이점은 무엇인가요 (6) | 2025.07.10 |
|---|---|
| <a> 태그를 이용해 외부 페이지를 열 때 보안상 고려해야 할 점은 무엇인가요? (0) | 2025.07.10 |
| 타입스크립트의 infer 키워드에 대해서 설명해주세요. (0) | 2025.07.09 |
| @OneToOne 연관관계에서 Lazy Loading을 설정할 때 주의할 점은 무엇일까요? (4) | 2025.07.09 |
| 웹소켓(WebSocket) (0) | 2025.07.08 |
