μμ 볡μ¬(Shallow Copy)λ μ£Όμκ°μ 볡μ¬νλ κ²μ λ§νλ€. (μ€ν μμ)
κΉμ 볡μ¬(Deep Copy)λ μ€μ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 볡μ¬νλ κ²μ λ§νλ€. (ν μμ)
1. μμ 볡μ¬(Shallow Copy) π
μμ 볡μ¬(Shallow Copy)λ μ£Όμκ°μ 볡μ¬νλ κ²μ΄λ€. μ°Έμ‘°κ°μ 볡μ¬νκΈ° λλ¬Έμ μμ κ·Έλ¦Όμ²λΌ κ°μ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν€κ³ μλ€. κ·Έλμ κΈ°μ‘΄μ κ°μ λ°κΎΈλ©΄ 볡μ¬λ κ°λ λ°λκ² λλ μν©μ΄ λ°μνλ€.
public class User {
String name;
int age;
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
----------
public class ShallowCopy {
public static void main(String[] args) {
User userA = new User("amenable", 24);
User userB = userA;
System.out.println(userA.name); // amenable
System.out.println(userB.name); // amenable
userA.name = "sunny"; // useAμ nameλ§ λ°κΎΌ μν©
System.out.println(userA.name); // sunny
System.out.println(userB.name); // sunny
}
}
μ΄λ₯Ό μλν κ²μ΄λΌλ©΄ μκ΄μ΄ μμ§λ§ μ°λ¦¬κ° μΌλ°μ μΌλ‘ μκ°νλ κ²μ²λΌ 볡μ¬λ κ°μ΄ κΈ°μ‘΄ κ°μ μν΄ μν₯μ λ°μ§ μμΌλ €λ©΄ κΉμ 볡μ¬λ₯Ό ν΄μΌ νλ€.
2. κΉμ 볡μ¬(Deep Copy) π
κΉμ 볡μ¬(Deep Copy)λ μ€μ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 볡μ¬νλ κ²μ΄λ€. 볡μ¬λ κ°μ κΈ°μ‘΄ κ°μ λ³κ²½μ μν₯μ λ°μ§ μλλ€. κΉμ 볡μ¬λ₯Ό ꡬννλ λ°©λ²μ 3κ°μ§κ° μ‘΄μ¬νλ€.
1. λ³΅μ¬ μμ±μ λλ λ³΅μ¬ ν©ν°λ¦¬λ₯Ό μ΄μ©νλ λ°©λ²
public class User {
String name;
int age;
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
// λ³΅μ¬ μμ±μ
public User(User user) {
this.name = user.name;
this.age = user.age;
}
// λ³΅μ¬ ν©ν°λ¦¬
public static User copyFactory(User user) {
User copyUser = new User(user.name, user.age);
return copyUser;
}
}
----------
public class DeepCopy {
public static void main(String[] args) {
User userA = new User("amenable", 24);
User userB = new User(userA);
User userC = User.copyFactory(userA);
System.out.println(userA.name); // amenable
System.out.println(userB.name); // amenable
System.out.println(userC.name); // amenable
userA.name = "sunny";
userB.name = "immortal";
System.out.println(userA.name); // sunny
System.out.println(userB.name); // immortal
System.out.println(userC.name); // amenable
}
}
2. μ§μ κ°μ²΄λ₯Ό μμ±νμ¬ λ³΅μ¬νλ λ°©λ²
public class DeepCopy {
public static void main(String[] args) {
User userA = new User("amenable", 24);
User userB = new User(userA.name, userA.age);
System.out.println(userA.name); // amenable
System.out.println(userB.name); // amenable
userA.name = "sunny";
System.out.println(userA.name); // sunny
System.out.println(userB.name); // amenable
}
}
3. Cloneable μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ clone() ν¨μλ₯Ό μ€λ²λΌμ΄λ©νμ¬ λ³΅μ¬νλ λ°©λ²
public class User implements Cloneable {
String name;
int age;
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public User clone() throws CloneNotSupportedException {
return (User) super.clone();
}
}
----------
public class DeepCopy {
public static void main(String[] args) throws CloneNotSupportedException {
User userA = new User("amenable", 24);
User userB = userA.clone();
System.out.println(userA.name); // amenable
System.out.println(userB.name); // amenable
userA.name = "sunny";
System.out.println(userA.name); // sunny
System.out.println(userB.name); // amenable
}
}
'clone μ¬μ μλ μ£Όμν΄μ μ§ννλΌ- μ΄νν°λΈ μλ°μ ITEM13'(κΈ1, κΈ2)μ λ°λ₯΄λ©΄ clone() μ¬μ μλ final μΈμ€ν΄μ€ λλ λ°°μ΄μ΄ μλ κ²½μ° μ¬μ©μ κΆνμ§ μλλ€λΌκ³ νλ€. κ·Έλ¬λ―λ‘ κΉμ 볡μ¬λ cloneμ΄ μλ λ€λ₯Έ λ°©λ²μ μ΄μ©νλλ‘ νμ.
ν΄λΉ κΈμ
μμ½λ© λμ 'Shallow copy(μμ 볡μ¬) vs Deep Copy(κΉμ 볡μ¬)',
μ΅λΈλ λμ '[Java] Shallow copyμ Deep copy',
μ μ°Έκ³ νμμ΅λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λνΌ ν΄λμ€ (Wrapper Class) (0) | 2023.05.09 |
---|---|
clone() (0) | 2023.04.07 |
JVM λ©λͺ¨λ¦¬ ꡬ쑰 (0) | 2023.03.24 |
λ³μ (0) | 2023.03.21 |
κ³΅λ³ λ°ννμ (Convariant Return Type) (0) | 2023.03.09 |