본문 바로가기

디자인 패턴

디자인 패턴 - 프로토타입 패턴(Prototype Pattern)

1. 정의

  • 인스턴스를 깊은 복사하여, 인스턴스 생성의 자원 소모를 줄일다.

💡 매번 DB의 데이터를 가져와서 인스턴스를 만드는 경우 자원 소모가 심하기 때문에, 깊은 복사를 통해 자원 소모를 줄인다.

2. 예시

  • 몬스터의 종류를 복사하여 사용한다.

3. 그림

4. 클래스 다이어그램

5. 코드

public class Client {
    public static void main(String[] args) throws CloneNotSupportedException {
        Monsters monsters = new Monsters();
        monsters.loadData();

        Monsters upMonster = (Monsters) monsters.clone();
        Monsters downMonster = (Monsters) monsters.clone();

        upMonster.getList().add("night");
        downMonster.getList().remove(0);

        monsters.print();
        System.out.println("\\n------");
        upMonster.print();
        System.out.println("\\n------");
        downMonster.print();
        System.out.println("\\n------");
    }
}
import java.util.ArrayList;
import java.util.List;

public class Monsters implements Cloneable{

    private List<String> list;

    public Monsters(){
        list = new ArrayList<>();
    }

    public Monsters(List<String> list) {
        this.list = list;
    }

    public List<String> getList(){
        return list;
    }

    public void loadData(){
        list.add("ghost");
        list.add("zombie");
        list.add("skeleton");
    }

    public void print(){
        for (String s : list) {
            System.out.print(s + " ");
        }
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        List<String> copy = new ArrayList<>(list);
        return new Monsters(copy);
    }
}

https://github.com/kang-seongbeom/design_pattern

💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.

6. 설명

  • clone()을 사용해 인스턴스를 복사할 수 있게 한다.
  • 객체 생성의 비용을 줄일 수 있다.