• ABOUT
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.09.12์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ”‘ ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ๊ฐœ๋…๊ณผ ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ •๋ฆฌ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ž€? 

ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)์€ ํ‚ค๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ •์ˆ˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. 

Map: ํ‚ค-๊ฐ’ ์Œ(key โ†’ value) ์ €์žฅ 
Set: ๊ฐ’์˜ ์กด์žฌ ใ…‡์—ฌ๋ถ€๋งŒ ์ €์žฅ (์ค‘๋ณต ํ—ˆ์šฉ X) 

๋‘ ์ž๋ฃŒ๊ตฌ์กฐ ๋ชจ๋‘ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ํƒ์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ ๋ชจ๋‘ ํ‰๊ท ์ ์œผ๋กœ O(1)์˜ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ•ต์‹ฌ์€ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ์ด๋‹ค. 
 


 

1) ํ•ด์‹œ ํ•จ์ˆ˜ (Hash Function)

์ž…๋ ฅ๊ฐ’(key)์„ ๋ฐ›์•„ ๊ณ ์ •๋œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋™์ผํ•œ ํ‚ค๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๋„ ๊ฐ™์€ ํ•ด์‹œ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ท ๋“ฑ ๋ถ„ํฌ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. 
 

2) ๋ฒ„ํ‚ท ์ธ๋ฑ์‹ฑ (Bucket Indexing) 

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํ‚ค๋ฅผ ์ •์ˆ˜๋กœ ๋ฐ”๊พธ๋Š” ์ผ๋งŒ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์‹œ๊ฐ’์„ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ„ํ‚ท ์ธ๋ฑ์‹ฑ์ด๋‹ค. 
 

plaintext
index = hash(key) % capacity


ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ๋‚˜์˜จ ์ •์ˆ˜๊ฐ’์„ ์ „์ฒด ๋ฒ„ํ‚ท ์ˆ˜๋กœ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ๊ฐ’์ด ์•„๋ฌด๋ฆฌ ์ปค๋„ ๋ฐฐ์—ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. 
 

3) ์ถฉ๋Œ ์ฒ˜๋ฆฌ (Collision Handling) 

ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ํ‚ค๋ฅผ ํ•œ์ •๋œ ์ธ๋ฑ์Šค ๊ณต๊ฐ„์˜ ๋ฐฐ์—ด์— ๋งคํ•‘ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ๋‹ค๋ฅธ ํ‚ค์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ ์ด๋ฅผ ์ถฉ๋Œ(Collision)์ด๋ผ๊ณ  ํ•œ๋‹ค. 
 

plaintext
"dog" -> hash = 42 -> index = 42 % 16 = 10
"god" -> hash = 58 -> index = 58 % 16 = 10 (์ถฉ๋Œ)


์ถฉ๋Œ์ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ๊ฐ’์„ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜์–ด ๋ฐ์ดํ„ฐ ์†์‹ค์ด ์ผ์–ด๋‚˜๊ณ  ์‚ฝ์ž…/ํƒ์ƒ‰/์‚ญ์ œ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ถฉ๋Œ์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋А๋ƒ์— ๋”ฐ๋ผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ๊ฒฐ์ •๋œ๋‹ค. 

[๋Œ€ํ‘œ์ ์ธ ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•]

1) ์ฒด์ด๋‹ (Chaining, ๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•) 
๊ฐ™์€ ์ธ๋ฑ์Šค์— ๋“ค์–ด์˜จ ํ‚ค๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(ํ˜น์€ ํŠธ๋ฆฌ)๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด์˜ ๊ฐ ์นธ์ด ๋…ธ๋“œ์˜ ์ฒด์ธ์„ ๊ฐ€์ง„๋‹ค. 
 

plaintext
bucket[10] -> [("dog", var1)] -> [("god", var2)] -> ...


์žฅ์ : ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ ์‚ญ์ œ๊ฐ€ ์‰ฝ๊ณ  *๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ 1์„ ๋„˜์–ด๋„ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
 

๋กœ๋“œ ํŒฉํ„ฐ(Load Factor)๋ž€? 
ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์ฐจ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„์œจ 
๊ณต์‹) ๋กœ๋“œ ํŒฉํ„ฐ ฮฑ = ์ €์žฅ๋œ ์›์†Œ ์ˆ˜ / ์ „์ฒด ๋ฒ„ํ‚ท ์ˆ˜ 


๋‹จ์ : ๊ฐ ๋ฒ„ํ‚ท์ด ํฌ์ธํ„ฐ๋ฅผ ๊ฐ–๊ฒŒ ๋˜์–ด ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์œ„์น˜๊ฐ€ ์—ฐ์†์ ์ด์ง€ ์•Š์•„ ์บ์‹œ์— ์นœํ™”์ ์ด์ง€ ์•Š๋‹ค. 

Java์˜ HashMap์€ ์ด ์ฒด์ด๋‹ ๋ฐฉ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ ์ฒด์ธ ๊ธธ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฉด Red-Black Tree๋กœ ์ž๋™ ์ „ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰๋Š”๋‹ค. 

2) ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ (Open Addressing, ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•) 
์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ๋‹ค์Œ ๋นˆ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„์„œ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์—ด ์ž์ฒด ์•ˆ์—์„œ ๋ชจ๋“  ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. 
 

plaintext
bucket[10] -> ์ด๋ฏธ ์‚ฌ์šฉ์ค‘ ->
bucket[11] ํ™•์ธ -> ๋น„์–ด์žˆ์Œ -> ์ €์žฅ


์žฅ์ : ๋ฐฐ์—ด๋งŒ์œผ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ ํฌ์ธํ„ฐ๋‚˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ ๋ณ„๋„ ๊ตฌ์กฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์บ์‹œ ์นœํ™”์ ์ด๋‹ค. 

๋‹จ์ : ์‚ญ์ œ ์‹œ ๊ฐ’์„ ๋‹จ์ˆœํžˆ ์ œ๊ฑฐํ•˜๋ฉด ํƒ์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ๋Š๊ฒจ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ  ๊ณต๊ฐ„์ด ์ ์  ์ฑ„์›Œ์งˆ์ˆ˜๋ก ๋นˆ ์ž๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ๋‚ฎ์•„์•ผ ์„ฑ๋Šฅ์ด ์œ ์ง€๋œ๋‹ค. 
 

*๋ฆฌ์‚ฌ์ด์ฆˆ 

๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ์„ค์ •ํ•œ ์ž„๊ณ„์น˜๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ์ž์ฒด์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ๋Š˜๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฐ’์„ ๋‹ค์‹œ ํ•ด์‹ฑ(rehash)ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฆฌ์‚ฌ์ด์ฆˆ(resize) ๋˜๋Š” ๋ฆฌํ•ด์‹œ(rehash) ๋ผ๊ณ  ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๊ฒƒ์ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์ถฉ๋ถ„ํžˆ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 
 

์ด์ „ ๊ธ€
๐Ÿž ๊ฒ€์ƒ‰์—”์ง„ ํƒ€์ž„์•„์›ƒ ๋ฌธ์ œ ํ•ด๊ฒฐ - Sitemap ์„ฑ๋Šฅ ์ตœ์ ํ™”
๋‹ค์Œ ๊ธ€
๐Ÿค– Next.js MetadataRoute ์ •๋ณต: Robots, Sitemap, Manifest๊นŒ์ง€ ํ•œ ๋ฒˆ์—
์žฅ์‹์šฉ ๋กœ๊ณ