๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…] ์บ์‹œ ์ง€์—ญ์„ฑ + ArrayList์™€ ๊ด€๊ณ„

์ถœ์ฒ˜

ChatGPT


์บ์‹œ ์ง€์—ญ์„ฑ(Caching Locality)์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ์ด ๊ฐœ๋…์€ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, ํŠนํžˆ CPU ์บ์‹œ์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์บ์‹œ ์ง€์—ญ์„ฑ์˜ ์œ ํ˜•

์บ์‹œ ์ง€์—ญ์„ฑ์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค:

1. ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ Temporal Locality

์ •์˜

์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋Š” ์•ž์œผ๋กœ๋„ ๋‹ค์‹œ ์ ‘๊ทผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ์›์น™์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ตœ๊ทผ์— ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์—๋„ ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

์˜ˆ์‹œ

๋ฐ˜๋ณต์ ์ธ ๋ฃจํ”„์—์„œ ๋™์ผํ•œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ‘๊ทผํ•  ๋•Œ ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ์ด ๋†’๋‹ค. ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU ์บ์‹œ๊ฐ€ ์ด๋ฅผ ์ €์žฅํ•ด ๋‘๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

2. ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ Spatial Locality

์ •์˜

ํ˜„์žฌ ์ ‘๊ทผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ์ ‘๊ทผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ์›์น™์ด๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์„œ๋กœ ๊ฐ€๊นŒ์šด ์œ„์น˜์— ์žˆ์„ ๋•Œ ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ์ด ๋†’๋‹ค.

์˜ˆ์‹œ

๋ฐฐ์—ด์˜ ์—ฐ์†์ ์ธ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ด์— ํ•ด๋‹นํ•œ๋‹ค. ๋ฐฐ์—ด ์š”์†Œ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์„ ์ˆœํšŒํ•  ๋•Œ๋Š” ๋†’์€ ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ์„ ๊ฐ€์ง„๋‹ค.

์บ์‹œ ์ง€์—ญ์„ฑ๊ณผ `ArrayList`์˜ ์„ฑ๋Šฅ

์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก

ArrayList`๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด์˜ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ๋•๋ถ„์—, `ArrayList`๋ฅผ ์ˆœํšŒํ•  ๋•Œ ์บ์‹œ ์ง€์—ญ์„ฑ์ด ๋†’๋‹ค. ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์ด ์—ฐ์†์ ์ด์–ด์„œ, CPU ์บ์‹œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด๋“ค์—ฌ ์บ์‹œ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํšจ์œจ์ ์ธ ์บ์‹œ ํ™œ์šฉ

์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ CPU ์บ์‹œ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋ฐฐ์น˜๋˜๋ฉด, CPU ์บ์‹œ๊ฐ€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ผ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

์บ์‹œ ์ง€์—ญ์„ฑ์˜ ์ด์ 

์†๋„ ํ–ฅ์ƒ

๋†’์€ ์บ์‹œ ์ง€์—ญ์„ฑ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ ๋‹ค.

CPU ์บ์‹œ ํšจ์œจ

๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ CPU ์บ์‹œ๋กœ ์˜ฎ๊ธธ ๋•Œ ์บ์‹œ ์ง€์—ญ์„ฑ์ด ์ข‹์œผ๋ฉด, ์บ์‹œ๊ฐ€ ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

๊ฒฐ๋ก 

์บ์‹œ ์ง€์—ญ์„ฑ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ค. ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์บ์‹œ ์ง€์—ญ์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `ArrayList`๋Š” ์ด๋Ÿฐ ํŠน์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์–ด, ์š”์†Œ๋ฅผ ์ˆœํšŒํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ CPU ์บ์‹œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.