[디자인패턴] 프로토타입 패턴(Prototype Pattern) - 다시 정리하기

Damsul·2023년 1월 20일
0

디자인패턴

목록 보기
10/15

원형이 되는 클래스를 생성하고, 해당 클래스의 객체를 복제하여 새로운 객체를 만들어나가는 패턴이다. 클래스를 동일하게 유지하면서 내부의 값이나 구조를 바꿔가며 새로운 객체를 만들 수 있기 때문에 클래스의 개수를 줄일 수 있다.

  1. 중복된 자원소모없이 객체를 복사하고 싶은 경우
  2. 복잡한 구조의 객체를 쉽게 복사하고 싶은 경우
    사용한다.

출처 : 위키디피아

  • Prototype : 복제를 위해 필요한 인터페이스 정의
  • ConcretePrototype : 인터페이스 구현 및 복제 연산 재정의
  • Client : 복제를 요청하여 새로운 객체 생성

예제

음악을 제작하는 코드를 구현한다고 가정해보자. 음악 제작에 필요한 공통적인 요소들로 추상 클래스(Ptototype)를 만들고, 해당 클래스를 상속하여 추가적으로 필요한 기능들을 구현한 클래스(ConcretePrototype)를 만든다. 복제를 통한 객체 생성을 위해 각각의 클래스는 Clone() 연산을 구현해야 한다.

  • Prototype

[Music.java]

public class Music implements Cloneable {
    private String name;
    private String title;

    public Music(String name, String title) {
        this.name = name;
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Music music = (Music) super.clone();
        music.title = this.title + "_복제품";
        return music;
    }

    @Override
    public String toString() {
        return name + " - " + title;
    }
}
  • Client

[Client.java]

public class Client {
    public static void main(String[] args) throws CloneNotSupportedException {
        Music music = new Music("royal44", "할 것");
        Music music_clone = (Music) music.clone();

        System.out.println("원본 : " + music.toString());
        System.out.println("복제품 : " + music_clone.toString());
        System.out.println("---------------------------------------");

        System.out.println("==노래 파일 변경==");
        music_clone.setName("비오");
        music_clone.setTitle("네가 없는 밤");
        System.out.println("복제품 : " + music_clone.toString());
    }

}
  • 실행 결과

장단점

  • 장점
  • 단점
profile
내 맘대로 작성하는 개발일지/ 작고 소중한 개발창고

0개의 댓글