본문

Prototype Pattern

반응형

 

- 객체에 의해 생성될 객체의 타입이 결정되는 생산 디자인 패턴
- 미리 만들어진 개체를 복사하여 개체를 생성하는 패턴

 

 

 

이미지 출처: https://www.geeksforgeeks.org/prototype-method-python-design-patterns/

 

 


일반적으로 객체를 새로 생성할때는 new Object()와 같은 방법으로 생성을 합니다. 하지만 new를 이용하여 객체를 생성하면, 기존에 만들어진 것과 유사하다고 해도 결국 모든 정보를 다시 설정해주어야 합니다. 

 

이번 글에서 다루는 Prototype Pattern에서 다루는 clone 메소드를 이용할 경우, 기존에 만들어진 것을 복사하여 변경이 필요한 부분만 수정하면 되기때문에 인스턴스 생성에 용이합니다.  

 

 

💡 source

import java.util.Date;

public class 복잡한정보클래스 implements Cloneable {
    private String 복잡한정보;
    private Date 날짜;

    public 복잡한정보클래스(String 복잡한정보) {
        this.복잡한정보 = 복잡한정보;
    }
    public String get복잡한정보() {
        return 복잡한정보;
    }
    public void set날짜(Date 날짜) {
        this.날짜 = new Date(날짜.getTime());
    }
    public Date get날짜() {
        return 날짜;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        복잡한정보클래스 temp = (복잡한정보클래스) super.clone();
        return temp;
    }
}

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        복잡한정보클래스 원형 = new 복잡한정보클래스("매우 복잡한 정보");
        try {
            복잡한정보클래스 복사본01 = (복잡한정보클래스) 원형.clone();
            복사본01.set날짜(new Date(2015, 8, 30));

            복잡한정보클래스 복사본02 = (복잡한정보클래스) 원형.clone();
            복사본02.set날짜(new Date(2015, 8, 31));

            System.out.println(복사본01.get날짜());
            System.out.println(복사본02.get날짜());

            System.out.println(복사본01.get복잡한정보() + " + 변경되는 데이터 1234");
            System.out.println(복사본02.get복잡한정보() + " + 변경되는 데이터 5678");
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

 

 

💡 결과

Thu Sep 30 00:00:00 KST 3915
Fri Oct 01 00:00:00 KST 3915
매우 복잡한 정보 + 변경되는 데이터 1234
매우 복잡한 정보 + 변경되는 데이터 5678
 

 

반응형

공유

댓글