[java] 프로토 타입 패턴

프로토 타입 패턴은 객체를 복제하는 데 사용되는 디자인 패턴 중 하나입니다. 이 패턴을 사용하면 기존 객체를 복제하여 새로운 객체를 생성할 수 있습니다. 이를 통해 객체를 생성하는 초기화 및 구성 단계를 피할 수 있으며, 런타임에 객체를 동적으로 복제할 수 있습니다.

어떻게 작동하나요?

프로토 타입 패턴은 주로 clone() 메서드를 사용하여 객체를 복제합니다. 일반적으로 자연스럽게 복제가 지원되는 언어의 경우에는 clone() 메서드를 사용하지만, 그렇지 않은 경우에는 명시적으로 객체를 복제하는 로직을 구현해야 합니다.

예제 코드

다음은 자바로 작성된 간단한 프로토 타입 패턴의 예제 코드입니다.

public abstract class Shape implements Cloneable {
    private String id;
    protected String type;

    abstract void draw();

    public String getType() {
        return type;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}
public class Rectangle extends Shape {
    public Rectangle() {
        type = "Rectangle";
    }

    @Override
    public void draw() {
        System.out.println("Inside Rectangle::draw() method.");
    }
}
public class Square extends Shape {
    public Square() {
        type = "Square";
    }

    @Override
    public void draw() {
        System.out.println("Inside Square::draw() method.");
    }
}
public class PrototypePatternDemo {
   public static void main(String[] args) {
      ShapeCache.loadCache();

      Shape clonedShape = (Shape) ShapeCache.getShape("1");
      System.out.println("Shape : " + clonedShape.getType());        

      Shape clonedShape2 = (Shape) ShapeCache.getShape("2");
      System.out.println("Shape : " + clonedShape2.getType());
   }
}

이 예제에서는 Shape 클래스와 그 서브 클래스들인 RectangleSquare 클래스를 보여줍니다. 또한, PrototypePatternDemo에서는 객체를 복제하여 새로운 객체를 생성하는 방법을 보여줍니다.

결론

프로토 타입 패턴은 객체 생성에 따른 비용을 감소시키고 런타임에 유연하게 객체를 생성할 수 있는 장점을 가지고 있습니다. 따라서, 이 패턴은 객체 생성과 관련된 성능 문제를 해결하는 데 효과적인 디자인 패턴입니다.

참고문헌: