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()을 사용해 인스턴스를 복사할 수 있게 한다.
- 객체 생성의 비용을 줄일 수 있다.
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 비지터 패턴(Visitor Pattern) (0) | 2022.11.18 |
---|---|
디자인 패턴 - 메멘토 패턴(Memento Pattern) (0) | 2022.11.18 |
디자인 패턴 - 중재자 패턴(Mediator Pattern) (0) | 2022.11.18 |
디자인 패턴 - 플라이웨이트 패턴(Flyweight Pattern) (0) | 2022.11.18 |
디자인 패턴 - 빌더 패턴(Builder Pattern) (0) | 2022.11.18 |