공장 패턴 객체 생성을 위한 디자인 패턴 중 하나보지마. 이 패턴은 객체 생성을 사용합니다. 캡슐화이것은 개체 생성의 복잡성을 숨기고 클라이언트 코드에서 개체 생성을 단순화합니다.
팩터리 패턴을 사용하면 클라이언트 코드에서 객체 생성 코드를 분리할 수 있습니다. 클라이언트 코드는 생성할 개체 유형을 지정하고 팩터리 클래스에 개체를 생성하도록 요청합니다. 팩토리 클래스는 이 요청을 기반으로 객체를 생성하고 클라이언트 코드에 반환합니다.
공장 패턴 일반적으로 인터페이스를 정의하고 인터페이스를 구현하는 클래스를 사용하여 개체를 만듭니다.이를 통해 클라이언트 코드는 인터페이스를 통해 객체를 요청할 수 있으며, 팩토리는 해당 인터페이스를 구현하는 클래스의 인스턴스를 생성하고 반환합니다. 따라서 클라이언트 코드는 개체 생성 프로세스에 대해 전혀 몰라도 인터페이스를 사용하여 개체에 액세스할 수 있습니다.
다음은 Java 언어를 사용하여 구현된 간단한 팩토리 패턴의 예입니다.
Shape 인터페이스를 구현하는 각 도형(원, 직사각형, 삼각형 등)에 대한 클래스가 있고 이를 생성하는 팩토리 클래스를 구현하려고 한다고 가정합니다.
먼저 Shape 인터페이스를 정의합니다.
public interface Shape {
void draw();
}
다음으로 이 인터페이스를 구현하는 각 Shape 클래스를 정의합니다.
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
마지막으로 이러한 지오메트리 객체를 생성하는 팩토리 클래스를 정의합니다.
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();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
위의 팩토리 클래스는 getShape() 메서드를 사용하여 클라이언트 코드에서 요청한 모양 유형에 해당하는 객체를 생성하고 반환합니다.
이제 다음과 같이 팩토리 클래스를 사용하여 클라이언트 코드에서 모양 객체를 생성하고 사용할 수 있습니다.
public class Client {
public static void main(String() args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
Shape shape2 = shapeFactory.getShape("RECTANGLE");
shape2.draw();
Shape shape3 = shapeFactory.getShape("SQUARE");
shape3.draw();
}
}
위의 예에서 클라이언트 코드는 개체를 직접 생성하지 않고 팩토리 클래스를 사용하여 개체를 생성하고 이를 추상화하는 인터페이스를 통해 개체에 액세스합니다. 따라서 팩토리 패턴을 사용하면 객체 생성과 사용 간의 종속성이 줄어들고 유연성과 확장성이 향상됩니다.
팩토리 패턴의 장점 유연성, 확장성 및 코드 재사용성 예를 들어, 클라이언트 코드는 객체 생성 코드를 변경하지 않고 새 객체를 생성하도록 팩토리 클래스를 수정할 수 있습니다. 이렇게 하면 코드 유지 관리 및 개발이 쉬워집니다. 또한 팩토리 패턴을 사용하면 개체 생성 코드를 중앙 집중화하여 코드 중복을 줄일 수 있습니다.
단점은 개체 생성 중에 성능 저하가 발생할 수 있다는 것입니다. 이는 팩토리 클래스에서 객체를 생성하는 과정이 복잡하거나 생성되는 객체의 수가 많을 때 영향을 미칩니다. 따라서 이러한 성능 문제는 팩토리 패턴을 사용할 때 고려하고 구현해야 합니다.