정의
사용하는 이유
방법
public class LegacyPizzaStore {
public static void main(String[] args) {
Pizza pizza = new Pizza();
pizza.makePizzaToppingList();
Pizza newPizza1 = new Pizza();
newPizza1.makePizzaToppingList();
Pizza newPizza2 = new Pizza();
newPizza2.makePizzaToppingList();
newPizza1.getPizzaToppingList().add("gorgonzola");
newPizza2.getPizzaToppingList().add("pineapple");
System.out.println(pizza);
System.out.println(newPizza1);
System.out.println(newPizza2);
}
}
public class Pizza implements Cloneable{
private String name;
private List<String> pizzaToppingList;
public Pizza() {
this.pizzaToppingList = new ArrayList<>();
}
public Pizza(List<String> pizzaToppingList) {
this.pizzaToppingList = pizzaToppingList;
}
public List<String> getPizzaToppingList() {
return pizzaToppingList;
}
public void makePizzaToppingList() {
this.pizzaToppingList.add("cheese");
this.pizzaToppingList.add("ham");
this.pizzaToppingList.add("tomato");
this.pizzaToppingList.add("potato");
}
@Override
protected Object clone() throws CloneNotSupportedException{
Pizza newPizza = (Pizza) super.clone();
newPizza.pizzaToppingList = new ArrayList<>(this.pizzaToppingList);
return newPizza;
}
@Override
public String toString() {
return pizzaToppingList.toString();
}
}
TEST CODE
public class PizzaStore {
public static void main(String[] args) throws CloneNotSupportedException{
Pizza pizza = new Pizza();
pizza.makePizzaToppingList();
Pizza clonePizza1 = (Pizza) pizza.clone();
Pizza clonePizza2 = (Pizza) pizza.clone();
List<String> newPizza1 = clonePizza1.getPizzaToppingList();
List<String> newPizza2 = clonePizza2.getPizzaToppingList();
newPizza1.add("gorgonzola");
newPizza2.add("pineapple");
System.out.println(pizza);
System.out.println(newPizza1);
System.out.println(newPizza2);
}
}
참고