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

Amenable's Blog

equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]
๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]

2023. 1. 7. 09:02

  equals๋ฅผ ์žฌ์ •์˜ํ•œ ํด๋ž˜์Šค ๋ชจ๋‘์—์„œ hashCode๋„ ์žฌ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด hashCode ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์–ด๊ธฐ๊ฒŒ ๋˜์–ด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ HashMap์ด๋‚˜ HashSet ๊ฐ™์€ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ์€ Object ๋ช…์„ธ์—์„œ ๋ฐœ์ทŒํ•œ hashCode์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ด๋‹ค. 

  • equals ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด hashCode๋Š” ๋งค๋ฒˆ ๊ฐ™์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค. ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋‹ค๋ฉด ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๊ฐ™๋‹ค๋ฉด, hashCode์˜ ๊ฐ’๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  • ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„, hashCode์˜ ๊ฐ’์€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด์‹œ ํ…Œ์ด๋ธ” ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  ๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ์˜ ๊ทœ์•ฝ์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

1. ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๊ฐ™๋‹ค๋ฉด, hashCode์˜ ๊ฐ’๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. ๐Ÿ›ด

  HashMap์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž. ์šฐ์„ , HashMap์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…์„ ํ•˜์ž๋ฉด ๊ฐ’์„ ๋„ฃ์„ ๋•Œ hashCode()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์–ด๋А ๋ฒ„ํ‚ท์— ๋„ฃ์„์ง€ ์ •ํ•˜๊ฒŒ ๋˜๊ณ , ๊ฐ’์„ ๊บผ๋‚ผ ๋•Œ hashCode๊ฐ’์„ ๋จผ์ € ๊ฐ€์ ธ์˜ค๊ณ  ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋“ค์–ด์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊บผ๋‚ด์˜จ๋‹ค. ํ•ด๋‹น ๊ฐœ๋…์„ ์ˆ™์ง€ํ•˜์˜€๋‹ค๋ฉด ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Map<PhoneNumber, String> map = new HashMap<>();
PhoneNumber number1 = new PhoneNumber(123, 456, 7890);
PhoneNumber number2 = new PhoneNumber(123, 456, 7890);

// (1)๊ณผ (2)๊ฐ€ ๋‹ค๋ฅธ hashCode๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
System.out.println(number1.hashCode()); // --- (1) 
System.out.println(number2.hashCode()); // --- (2)
System.out.println(number1.equals(number2)); // true

map.put(number1, "amenable");
map.put(number2, "choi");

String s1 = map.get(number2);
System.out.println(s1); // choi

String s2 = map.get(new PhoneNumber(123, 456, 7890)); // number2์—์„œ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด hashCode ์ƒ์„ฑ
System.out.println(s2); // null

 

  number2๋Š” ์ผ์ข…์˜ ๊ฐ’ ํด๋ž˜์Šค์ด๋‹ค. ๊ฐ’ ํด๋ž˜์Šค๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐ’ ํด๋ž˜์Šค๋ฅผ ๋„ฃ๋”๋ผ๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰ 2์ค„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ทธ๋ ‡๊ฒŒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ hash๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค.

 

2. ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„, hashCode์˜ ๊ฐ’์€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด์‹œ ํ…Œ์ด๋ธ” ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๐Ÿ›ต

  ํ•ด์‹œ ํ…Œ์ด๋ธ” ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•  ๋•Œ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋Š” ์™œ ๋‹ค๋ฅธ hashCode๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€์ง€ ์•Œ์•„๋ณด์ž. ์œ„์—์„œ ์‚ดํŽด๋ณธ HashMap์˜ ๋™์ž‘ ๋ฐฉ๋ฒ•์„ ๊ธฐ์–ตํ•ด๋ณธ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ’์„ ๋„ฃ์„ ๋•Œ ๋งŒ์•ฝ hash๊ฐ’์ด ํ•ญ์ƒ ๊ฐ™๋‹ค๋ฉด ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— ๋ชจ๋‘ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ด์‰ฌ ์ถฉ๋Œ(Hash Collision)์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ๋ฒ„ํ‚ท ํ•˜๋‚˜์— ๋‹ด๊ฒจ ํ•ด์ทจ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋ฉด ๋งˆ์น˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ธ๋‹ค๊ณ  ํ•˜๋ฉด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋‹ด๊ธด ๋ฒ„ํ‚ท์— ๊ฐ€์„œ Linked List๋ฅผ ๋ณด๋ฉด์„œ equals๋กœ ๋น„๊ตํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด HashMap์„ ์“ฐ๋Š” ์žฅ์ ์ด ํ•˜๋‚˜๋„ ์—†๊ณ  ๊ทธ๋ƒฅ Linked LIst๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™๋‹ค. O(1)๋กœ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด O(n)์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

  ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜์ž๋ฉด, ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•  ๋•Œ ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๋‹ค๋ฅด๋ฉด hashCode๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ๊ฒƒ์ด์ง€, ๊ผญ ๋‹ฌ๋ผ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค!

 


 

  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” hashCode์˜ ๊ทœ์•ฝ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ hashCode๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

ํ•ด๋‹น ๊ธ€์€ ๋ฐฑ๊ธฐ์„  ๋‹˜์˜ '์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์™„๋ฒฝ ๊ณต๋žต'์„ ์ˆ˜๊ฐ•ํ•˜๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

'๐Ÿ“‚ JAVA > ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ12)]  (0) 2023.03.01
equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]  (0) 2023.01.09
equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(3) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]  (2) 2023.01.06
equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]  (0) 2023.01.06
equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]  (0) 2023.01.05
    '๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ12)]
    • equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]
    • equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(3) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]
    • equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

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