Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable
๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…

์–•์€ ๋ณต์‚ฌ(Shallow Copy) vs ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)

์–•์€ ๋ณต์‚ฌ(Shallow Copy) vs ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)
๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…

์–•์€ ๋ณต์‚ฌ(Shallow Copy) vs ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)

2023. 4. 7. 21:41

  ์–•์€ ๋ณต์‚ฌ(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
  • 1. ์–•์€ ๋ณต์‚ฌ(Shallow Copy) ๐Ÿ
  • 2. ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy) ๐Ÿž
'๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ž˜ํผ ํด๋ž˜์Šค (Wrapper Class)
  • clone()
  • JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
  • ๋ณ€์ˆ˜
Amenable
Amenable
CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.