๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๊ธฐ ์ํด์๋ Cloneable์ ๊ตฌํํ๊ณ , clone() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ฉด ๋์ ๊ฐ๋จํ๋ค!
@Getter
@Setter
public class Person implements Cloneable{
private String name;
private int age;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด person1.clone(); ์ ์ฌ์ฉํ์ฌ person1์ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ์๋ค.
Person person1 = new Person();
person1.setName("ํ๊ธธ๋");
person1.setAge(30);
try {
Person person2 = (Person)person1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
clone()์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ Deep Copy(๊น์ ๋ณต์ )๋ก ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
์ฆ, ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์๋ณธ์ ๋ณ๊ฒฝํด๋ ๋ณต์ ๋ณธ์ด ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์๋ฐ์์ Shallow Copy์ Deep Copy๊ฐ ์๋๋ฐ ๊ทธ ์ฐจ์ด๊ฐ ๋ญ์ง ์์๋ณด์.
Shallow Copy(์์ ๋ณต์ )๋ ์๋ณธ๊ณผ ๋ณต์ ๋ณธ์ด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์์ ํ ๋ณต์ ๋ผ ๋ณด๊ธฐ ์ด๋ ต๋ค. (= ์ฐ์ฐ์ ์ฌ์ฉ)
์ฆ, ๊ฐ์ด ์๋ ์ฃผ์๊ฐ์ ๋ณต์ฌํ๊ณ , ์๋ณธ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ๋ณต์ ๋ณธ๋ ์ํฅ์ ๋ฐ๊ฒ ๋๋ค.
์๋ ์์ ๋ฅผ ์ดํด๋ณด๋ฉด Shallow Copyํ person3๋ person1์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ์ํฅ์ ๋ฐ์๊ณ , Deep Copyํ person2๋ ์ํฅ์ ๋ฐ์ง ์์ ๊ฒ์ ๋ณผ ์ ์๋ค.
Person person1 = new Person();
person1.setName("ํ๊ธธ๋");
person1.setAge(30);
Person person2 = null;
try {
//Deep Copy
person2 = (Person)person1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
//Shallow Copy
Person person3 = person1;
System.out.println(person1.getName()); //ํ๊ธธ๋
System.out.println(person2.getName()); //ํ๊ธธ๋
System.out.println(person3.getName()); //ํ๊ธธ๋
//person1์ ์ด๋ฆ ๋ณ๊ฒฝ
person1.setName("์๋ฌด๊ฐ");
System.out.println(person1.getName()); //์๋ฌด๊ฐ
System.out.println(person2.getName()); //ํ๊ธธ๋
System.out.println(person3.getName()); //์๋ฌด๊ฐ
๊ทธ๋ฆฌ๊ณ ๊ฐ ๊ฐ์ฒด์ ํด์์ฝ๋๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด person1๊ณผ person3๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
System.out.println(person1.hashCode()); //903470137
System.out.println(person2.hashCode()); //1913208269
System.out.println(person3.hashCode()); //903470137
๋ณธ์ธ์ ํ๊ฒฝ์ค์ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๋ง๊ณ ์ ํด๋น ๊ฐ์ฒด๋ฅผ ๋๊ธธ๋ Deep Copy(clone)์ ์ด์ฉํ์ฌ ๋ณต์ ๋ ๊ฐ์ฒด๋ฅผ ๋๊ฒผ๊ณ , ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ์๋ค.
๋๊ธ