did_story

[Java] ๋™์ผ์„ฑ(Identity)๊ณผ ๋™๋“ฑ์„ฑ(Equality) ๋ณธ๋ฌธ

BackEnd๐Ÿƒ/Java

[Java] ๋™์ผ์„ฑ(Identity)๊ณผ ๋™๋“ฑ์„ฑ(Equality)

์–ด์ œ์‹œ์ž‘ 2025. 6. 27. 14:39

๋™์ผ์„ฑ(Identity)์€ ๋‘ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ฐ™์Œ์„ ์˜๋ฏธํ•œ๋‹ค.(== : ๊ฐ์ฒด ๋™์ผ ๋น„๊ต)

๋™๋“ฑ์„ฑ(Equality)์€ ๋‘ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๊ฐ™์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ( equals() )

void Identity() {
    List<String> fluits_first = List.of("apple", "pineapple", "mango");
    List<String> fluits_second = fluits_first;

    System.out.println(fluits_first == fluits_second); // true
    System.out.println(fluits_first.equals(fluits_second)); // true
}

void Equality() {
    List<String> fluits_first = List.of("apple", "pineapple", "mango");
    List<String> fluits_second = List.of("apple", "pineapple", "mango");

    System.out.println(fluits_first == fluits_second); // false
    System.out.println(fluits_first.equals(fluits_second)); // true
}

์ฒซ๋ฒˆ์งธ Test์—์„œ๋Š”, fluits_second์—์„œ ๋ฆฌ์ŠคํŠธ fluits_first๋ฅผ ๋Œ€์ž…์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌ๋ฉด fluits_first๊ณผ fluits_second๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‘๋ฒˆ์งธ Test์—์„œ๋Š”, fluits_second์—์„œ ์ƒˆ๋กญ๊ฒŒ ์„ ์–ธ๋˜์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฆ‰ fluits_first๊ณผ fluits_second๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

 

์ฆ‰ ํ•˜์ง€๋งŒ ๋™๋“ฑ์„ฑ์ด ์ง€์ผœ์ง„๋‹คํ•ด์„œ, ๋™์ผ์„ฑ์ด ์ง€์ผœ์ง€์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์ผ์„ฑ์ด ์ง€์ผœ์ง€๋ฉด ๋™๋“ฑ์„ฑ์ด ์ง€์ผœ์ง‘๋‹ˆ๋‹ค.

๋˜ ํ•˜๋‚˜์˜ ์žฌ๋ฐŒ๋Š” ์‚ฌ์‹ค!

String fluit1 = "mango";
String fluit2 = "mango";

System.out.println(fluit1 == fluit2); // true? false?

์ •๋‹ต์€ ๋ฐ”๋กœ True!

Java์—์„œ ๋ฌธ์ž์—ด์€ String Pool๋กœ ๊ด€๋ฆฌ ๋˜๋ฏ€๋กœ, “mango”๋ผ๋Š” ๋‘ ๊ฐœ์˜ String ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋”๋ผ๋„,

JVM Heap ๋ฉ”๋ชจ๋ฆฌ์˜ String Pool ์—์„œ๋Š” ๋ฌธ์ž์—ด 1๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋กœ๋ณธ๋‹ค → ๋™์ผ์„ฑ์„ ๊ฐ–์Œ!

๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋กœ ๋ณด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”?! (์ฆ‰ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ €์žฅํ• ๋ ค๋ฉด?!)

String fluit1 = "mango";
String fluit2 = new String("mango");

System.out.println(fluit1 == fluit2); // true? false?

new ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด์„œ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋™๋“ฑ์„ฑ์€ ๋ณด์žฅ๋˜์ง€๋งŒ, ๋™์ผ์„ฑ์€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

๋” ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด?!

[Java] hashCode()์—์„œ equals()๋ฅผ ์žฌ์ •์˜ ํ•ด์•ผํ•˜๋Š” ์ด์œ