반응형
프로토타입 패턴 (Prototype Pattern)
- 생성 패턴 (Creational Pattern) 중 하나
=> 인스턴스를 만드는 절차를 추상화
=> 객체를 생성, 합성하는 방법이나 객체의 표현 방법을 시스템과 분리해줍니다.
=> 무엇이 생성되고, 누가 이것을 생성하는지, 어떻게 생성되는지, 언제 생성되는지 결정하는 데 있어서 유연성을 높일 수 있습니다.
- 이미 만들어진 객체를 복사해서 객체를 생성하는 방식
- 어떠한 객체를 여러 개 만들어야 할 경우, 객체 생성에 드는 코딩 분량을 현저히 줄일 수 있다.
- 프로토타입 패턴을 사용하면, 여러 객체 생성 및 초기화에서 발생하는 오버헤드(Overhead)를 줄일 수 있다.
- 클래스로부터 객체를 생성하기 어려운 경우에도 사용
아래 예시에 사용될 Student 객체
import java.util.*;
public class Student implements Cloneable {
private List<String> students;
public Student() {
this.students = new ArrayList<>();
}
public Student(List<String> lst) {
this.students = lst;
}
public void dataSetting() {
this.students.add("a");
this.students.add("b");
this.students.add("c");
this.students.add("d");
}
public void addData(String s) {
this.students.add(s);
}
public List<String> getList() {
return this.students;
}
@Override
protected Object clone() throws CloneNotSupportedException {
List<String> tmp = new ArrayList<>();
for (String str : this.students) {
tmp.add(str);
}
return new Student(tmp);
}
}
예시 - 프로토타입 패턴을 사용한 경우
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
// write your code here
Student stu0 = new Student();
stu0.dataSetting();
stu0.addData("e");
stu0.addData("f");
stu0.addData("g");
stu0.addData("h");
Student stu1 = (Student) stu0.clone();
Student stu2 = (Student) stu0.clone();
stu1.addData("x");
stu2.addData("y");
System.out.println("stu0 : "+stu0.getList());
System.out.println("stu1 : "+stu1.getList());
System.out.println("stu2 : "+stu2.getList());
}
}
예시 - 프로토타입 패턴을 사용하지 않은 경우
- 같은 결과를 출력하기 위해서 더 많은 코드분량을 필요로 하는 것을 알 수 있다.
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
// write your code here
Student stu0 = new Student();
stu0.dataSetting();
stu0.addData("e");
stu0.addData("f");
stu0.addData("g");
stu0.addData("h");
Student stu1 = new Student();
stu1.dataSetting();
stu1.addData("e");
stu1.addData("f");
stu1.addData("g");
stu1.addData("h");
stu1.addData("x");
Student stu2 = new Student();
stu2.dataSetting();
stu2.addData("e");
stu2.addData("f");
stu2.addData("g");
stu2.addData("h");
stu2.addData("x");
System.out.println("stu0 : "+stu0.getList());
System.out.println("stu1 : "+stu1.getList());
System.out.println("stu2 : "+stu2.getList());
}
}
참고 :
반응형
'스터디 > Design Pattern' 카테고리의 다른 글
디자인 패턴 - 전략 패턴 (Strategy Pattern) (0) | 2020.05.31 |
---|---|
디자인 패턴 - 옵저버 패턴 (Observer Pattern) (0) | 2020.05.30 |
디자인 패턴 - 추상 팩토리 패턴 ( Abstract Factory Pattern ) (0) | 2020.05.30 |
디자인 패턴 - 팩토리 메소드 패턴 (Factory Method Pattern) (0) | 2020.05.30 |
디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2020.05.30 |
댓글