ํ๋กํ ํ์ ํจํด (Prototype Pattern)
ํ๋กํ ํ์
ํจํด์ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์ฑ ํจํด์
๋๋ค. ๋ณต์กํ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ์ ์ถ์ํํ๊ณ , ๊ฐ์ฒด ์์ฑ ๋น์ฉ์ ์ค์ด๋ฉฐ, ๋ฐํ์์ ๊ฐ์ฒด์ ํ์
์ ๋์ ์ผ๋ก ๊ฒฐ์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
์ฃผ์ ๋ชฉ์
โข
๋ณต์กํ ๊ฐ์ฒด ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํ
โข
๊ฐ์ฒด ์์ฑ์ ํ์ํ ๋ฆฌ์์ค ์ ์ฝ
โข
๋ฐํ์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ์์ฑ
ํน์ง
โข
๊ธฐ์กด ๊ฐ์ฒด์ clone() ๋ฉ์๋๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด ์์ฑ
โข
๊ฐ์ฒด ์์ฑ ๋น์ฉ์ด ๋์ ๊ฒฝ์ฐ ํจ๊ณผ์
โข
๊น์ ๋ณต์ฌ์ ์์ ๋ณต์ฌ ๊ตฌํ ๋ฐฉ์ ์ ํ ๊ฐ๋ฅ
์์ ์ฝ๋
public abstract class Shape implements Cloneable {
private String id;
protected String type;
abstract void draw();
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
public class Circle extends Shape {
public Circle() {
type = "Circle";
}
@Override
void draw() {
System.out.println("Circle ๊ทธ๋ฆฌ๊ธฐ");
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์์ ์ฝ๋๋ ํ๋กํ ํ์
ํจํด์ ๊ธฐ๋ณธ ๊ตฌํ์ ๋ณด์ฌ์ค๋๋ค:
โข
Shape ํด๋์ค: ์ถ์ ํด๋์ค๋ก, Cloneable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๋ณต์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
โข
clone() ๋ฉ์๋: Object ํด๋์ค์ clone() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๊ฐ์ฒด์ ๋ณต์ ๋ก์ง์ ๊ตฌํํฉ๋๋ค.
โข
Circle ํด๋์ค: Shape๋ฅผ ์์๋ฐ์ ๊ตฌ์ฒด์ ์ธ ๋ํ์ ๊ตฌํํ๋ ํด๋์ค์
๋๋ค.
์ด ๊ตฌํ์ ํตํด Circle ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ , ๊ธฐ์กด Circle ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ฒด ์์ฑ ๋น์ฉ์ด ๋์ ๊ฒฝ์ฐ ํจ์จ์ ์
๋๋ค.
// ์ฌ์ฉ ์์
Circle circle = new Circle();
Circle clonedCircle = (Circle) circle.clone();
Java
๋ณต์ฌ
๋ณต์ ๋ ๊ฐ์ฒด๋ ์๋ณธ ๊ฐ์ฒด์ ๋์ผํ ์์ฑ์ ๊ฐ์ง์ง๋ง, ๋
๋ฆฝ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.