팩토리 패턴
- 정의
- 객체를 사용하는 코드에서, 객체 생성 부분을 떼어내 추상화한 패턴
- 상속 관계에 있는 두 클래스에서 상위 클래스가 뼈대를 결정하고, 하위 클래스에서 객체의 구체적 내용을 결정하는 패턴
- 장점
- 유연성
- 상위, 하위 클래스가 분리 되기 떄문에 loose 한 결합을 가진다.
- 인스턴스 생성방식에 전혀 알 필요가 없다
- 캡슐화
- 객체 생성 로직이 따로 떼어져 있기 때문에 리팩토링시, 특정 위치만 고치면 되므로, 유지 보수성이 증가한다.
- 확장성
- 새로운 클래스 추가 시 기존 코드를 수정하지 않고 확장할 수 있다
- 유연성
- 단점
- 복잡성 증가
- 클래스가 많아지기 때문에, 코드 구조가 복잡해질 수 있다
- 추가 계층
- 팩토리 클래스가 추가되기 때문에, 코드의 가독성이 낮아질 수 있다
- 복잡성 증가
- 사용하는 곳
- 객체 생성 로직이 복잡한 경우
- 객체 생성 시점이나 생성 방법을 유연하게 변경해야 하는 경우
- 클라이언트 코드가 특정 클래스에 의존하지 않도록 해야 할때
- 코드
// Shape.java
public interface Shape {
void draw();
}
// Circle.java
public class Circle implements Shape {
public void draw() {
System.out.println("Circle.");
}
}
// Rectangle.java
public class Rectangle implements Shape {
public void draw() {
System.out.println("Rectangle");
}
}
- 코드 - 팩토리
// Factory
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
- 코드 - 팩토리 데모(main 포함)
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.getShape("CIRCLE");
circle.draw();
Shape rectangle = shapeFactory.getShape("RECTANGLE");
rectangle.draw();
}
}
'CS > 디자인 패턴' 카테고리의 다른 글
(CS) 디자인 패턴 - 전략 패턴 (1) | 2025.01.09 |
---|---|
(CS) 디자인 패턴 - 싱글톤 패턴 (0) | 2025.01.07 |