• ABOUT
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.10.26Java

๐Ÿ”— ์ž๋ฐ”์˜ ๊ฐ์ฒด ๋น„๊ต - equals()์™€ hashCode()๋ฅผ ํ•จ๊ป˜ ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

equals() 

์ž๋ฐ”์˜ equals() ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐ์ฒด๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€์ง€ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ด๋•Œ โ€œ๊ฐ™๋‹คโ€์˜ ๊ธฐ์ค€์€ ๋‹จ์ˆœํžˆ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์ด ๋™์ผํ•œ์ง€(๋…ผ๋ฆฌ์  ๋™๋“ฑ์„ฑ)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 
 

java
String a = new String("BlueCool");
String b = new String("BlueCool");

System.out.println(a == b);      // false (์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฆ„)
System.out.println(a.equals(b)); // true  (๋ฌธ์ž์—ด์ด ๊ฐ™์Œ)


์œ„ ์˜ˆ์‹œ์—์„œ == ์—ฐ์‚ฐ์ž๋Š” ๋‘ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(์ฐธ์กฐ)๋ฅผ ๊ฐ€์ง€๋Š”์ง€๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋”ฐ๋ผ์„œ new ํ‚ค์›Œ๋“œ๋กœ ๊ฐ๊ฐ ์ƒ์„ฑํ•œ String ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์กด์žฌํ•˜๋ฏ€๋กœ ๋‚ด์šฉ์ด ๊ฐ™๋”๋ผ๋„ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ String ํด๋ž˜์Šค๋Š” ์ด๋ฏธ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์ด ๊ฐ™์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์žฌ์ •์˜๋˜์–ด ์žˆ๋‹ค. 
 

java
public boolean equals(Object anObject) {
  if (this == anObject) {
    return true;
  }
  return (anObject instanceof String aString)
    && (!COMPACT_STRINGS || this.coder == aString.coder)
    && StringLatin1.equals(value, aString.value);
}


์ฆ‰ String ํด๋ž˜์Šค์—์„œ๋Š” ์ฐธ์กฐ ๋™์ผ์„ฑ(==) ๋Œ€์‹  ๋…ผ๋ฆฌ์  ๋™์ผ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๋™๋“ฑ์„ฑ์„ ํŒ๋‹จํ•œ๋‹ค. 

equals() ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ์ธ Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ ๊ตฌํ˜„์€ ๋‹จ์ˆœํžˆ ์ฐธ์กฐ๊ฐ’์ด ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•œ๋‹ค. 
 

java
Object blue = new Object();
Object cool = new Object();

System.out.println(blue.equals(cool)); // false
System.out.println(blue == cool);      // false

// ์‹ค์ œ Object ํด๋ž˜์Šค์˜ equals() ๊ธฐ๋ณธ ๊ตฌํ˜„
public boolean equals(Object obj) {
  return (this == obj);
}


๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด์˜ ๋…ผ๋ฆฌ์  ๋™๋“ฑ์„ฑ์„ ํŒ๋‹จํ•˜๋ ค๋ฉด ๋‹ค์Œ์˜ ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉฐ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์•ผ ํ•œ๋‹ค. 

  • ๋ฐ˜์‚ฌ์„ฑ 
    x.equals(x)๋Š” ํ•ญ์ƒ true์—ฌ์•ผ ํ•œ๋‹ค.
  • ๋Œ€์นญ์„ฑ 
    x.equals(y)๊ฐ€ true๋ฉด y.equals(x)๋„ true์—ฌ์•ผ ํ•œ๋‹ค.
  • ์ถ”์ด์„ฑ 
    x.equals(y)์™€ y.equals(z)๊ฐ€ true๋ฉด x.equals(z)๋„ true์—ฌ์•ผ ํ•œ๋‹ค.
  • ์ผ๊ด€์„ฑ 
    ๋น„๊ต ๋Œ€์ƒ์ด ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฉด equlas()์˜ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.
  • null-์•ˆ์ •์„ฑ 
    x.equals(null)์€ ํ•ญ์ƒ false์—ฌ์•ผ ํ•œ๋‹ค.

 


hashCode() 

hashCode()๋Š” ๊ฐ์ฒด๋ฅผ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ด ๊ฐ’์€ HashMap, HashSet๊ณผ ๊ฐ™์€ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ €์žฅํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฒ„ํ‚ท ์ธ๋ฑ์Šค ํ‚ค๋กœ ์‚ฌ์šฉ๋œ๋‹ค. 
 

java
Developer dev = new Developer("BlueCool", 12); 
int hash = dev.hashCode(); // ์˜ˆ์‹œ: 427492637 


hashCode()์˜ ์—ญํ• ์€ ๋‹จ์ˆœํžˆ ์ˆซ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋™๋“ฑํ•œ ๊ฐ์ฒด๋Š” ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์•ฝ์„ ์ง€ํ‚ค๋Š”๋ฐ ์žˆ๋‹ค. 

Hash ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์€ ๋‚ด๋ถ€์ ์œผ๋กœ hashCode() ๊ฐ’์„ ์ด์šฉํ•ด ์ €์žฅ ์œ„์น˜(๋ฒ„ํ‚ท)์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฐ™์€ ๋ฒ„ํ‚ท์— ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ์ตœ์ข… ํ™•์ธํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ equals()๋งŒ ์žฌ์ •์˜ํ•˜๊ณ  hashCode()๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ ๊ฐ์ฒด์ด๋”๋ผ๋„ ์„œ๋กœ ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด HashMap, HashSet ๋“ฑ์˜ ์ปฌ๋ ‰์…˜์—์„œ ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋˜๊ฑฐ๋‚˜ ์กฐํšŒ, ์‚ญ์ œ์— ์‹คํŒจํ•˜๊ฒŒ ๋˜๋Š” ๋“ฑ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ equals()๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ hashCode()๋„ ํ•จ๊ป˜ ์žฌ์ •์˜ํ•ด์•ผํ•˜๋ฉฐ hashCode ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์•ฝ์„ ๋”ฐ๋ฅธ๋‹ค.  

  • ์ผ๊ด€์„ฑ 
    ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ™์€ ์‹คํ–‰ ์ค‘์—๋Š” hashCode()์˜ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ๋™์น˜ ๋™์ผ ํ•ด์‹œ 
    x.equals(y)๊ฐ€ true๋ฉด ๋ฐ˜๋“œ์‹œ x.hashCode() == y.hashCode()์—ฌ์•ผ ํ•œ๋‹ค.
  • ์ถฉ๋Œ ํ—ˆ์šฉ 
    ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ผ๋„ ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€๋Šฅํ•œ ์ถฉ๋Œ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

 

์ด์ „ ๊ธ€
โš™๏ธ ์šด์˜ ํ™˜๊ฒฝ๊นŒ์ง€ ๊ณ ๋ คํ•œ JPA ์„ค์ • ๊ฐ€์ด๋“œ
๋‹ค์Œ ๊ธ€
๐Ÿ”ค Java์˜ String์ด ํŠน๋ณ„ํ•œ ์ด์œ  - String์˜ ํ•ต์‹ฌ ํŠน์ง• 3๊ฐ€์ง€
์žฅ์‹์šฉ ๋กœ๊ณ