Search
Duplicate

Array & List

์ƒ์„ฑ์ผ
2023/02/20 11:37
ํƒœ๊ทธ
์ž๋ฃŒ๊ตฌ์กฐ

Array & List

๋ฐฐ์—ด(Array)๊ณผ ๋ฆฌ์ŠคํŠธ(List)๋Š” ๋งค์šฐ ์œ ์‚ฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์–ธ์–ด๋งˆ๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚ด์žฅํ•˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ๊ทธ ํŠน์„ฑ์— ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ ๋”์šฑ ๋ชจํ˜ธํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด์ง€๊ณค ํ•œ๋‹ค.

๋ฐฐ์—ด (Array)

๋ฐฐ์—ด(Array)์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
โ€ข
์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜์–ด ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ์ธ๋ฑ์Šค(Index)๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
๋”ฐ๋ผ์„œ Array์—์„œ ์ธ๋ฑ์Šค๋Š” ์ฃผ์†Œ์— ์ƒ์‘ํ•˜๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
โ€ข
๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์™€ ์ธ๋ฑ์Šค๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ํŠน์ • ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด๋„ ์ธ๋ฑ์Šค์™€ ๋นˆ ๊ณต๊ฐ„์ด ๋‚จ๋Š”๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ด๋‹ค.
โ€ข
๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.
โ€ข
์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ ์ค‘๋ฅ ์ด ๋‚ฎ๋‹ค
โ€ข
์‚ฝ์ž…, ์‚ญ์ œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ O(N). ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์‹œ ํ•ด๋‹น ์ธ๋ฑ์Šค ์ฃผ๋ณ€์˜ ๊ฐ’์„ ์ด๋™์‹œํ‚ค๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
โ€ข
์ ‘๊ทผ ์‹œ๊ฐ„๋ณต์žก๋„ O(1)

๋ฆฌ์ŠคํŠธ (List)

๋ฆฌ์ŠคํŠธ(List) ์—ญ์‹œ ์ˆœ์„œ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ์ธ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์‹œํ€€์Šค(Sequence)๋ผ๊ณ ๋„ ํ•œ๋‹ค.
โ€ข
๋ฆฌ์ŠคํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋น„์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ํฌ์ธํ„ฐ๋กœ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ญ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋‹ค.
โ€ข
ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ณ , ๊ทธ๋ ‡๊ธฐ์— ๋ฐฐ์—ด๋ณด๋‹ค ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๋‹ค.
โ€ข
๋น„์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜๊ธฐ์— ์ธ๋ฑ์Šค๋กœ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์ธ๋ฑ์Šค๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ ์ •๋„์˜ ์˜๋ฏธ๋งŒ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
โ€ข
ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.
โ€ข
์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ ์ค‘๋ฅ ์ด ๋‚ฎ๋‹ค.
โ€ข
์‚ฝ์ž…, ์‚ญ์ œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ O(1)
โ€ข
์ ‘๊ทผ ์‹œ๊ฐ„๋ณต์žก๋„ O(N). ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด Head ํฌ์ธํ„ฐ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ ์ค‘๋ฅ  (Cache Hit Ratio)

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„ ์ฐจ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์† ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊บผ๋‚ด์„œ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค
โ†’ ๋น ๋ฅด๊ณ  ๋น„์‹ธ๋‹ค
CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ ์ค‘(hit) , ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์‹คํŒจ(miss) ๋ผ๊ณ  ํ•œ๋‹ค.
์ ์ค‘๋ฅ (Hit Ratio)๋Š” ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐพ์„ ํ™•๋ฅ ์ด๋‹ค.
ratio=hitshits+missratio = {hits\over hits+miss}
์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฐธ์กฐ์˜ ์ง€์—ญ์„ฑ(Locality)์— ๊ทผ๊ฑฐํ•œ๋‹ค.
โ€ข
์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ(temporal Locality) : ํ•œ ๋ฒˆ ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
โ€ข
๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ(spatial Locality) : ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ์™€ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
โ€ข
์ˆœ์ฐจ์  ์ง€์—ญ์„ฑ(sequential Locality) : ๋ถ„๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.
Array๋Š” ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , List๋Š” ๋น„์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค๋Š” ์ ์—์„œ ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ ์ธก๋ฉด์—์„œ Array์˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ ์ค‘๋ฅ ์ด ๋” ๋†’์„ ๊ฒƒ์ด๋‹ค.

List (Python)

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

Array List (Java)

Java์˜ java.util ํŒจํ‚ค์ง€๋Š” ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๊ฐ€๋Šฅํ•œ Array์ธ ArrayList ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ArrayList๋Š” ์ €์žฅ ๊ฐ€๋Šฅํ•œ ์šฉ๋Ÿ‰(Capacity)์™€ ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ์šฉ๋Ÿ‰(Size)๊ฐ€ ์žˆ๊ณ , ๊ฐ€๋Šฅํ•œ ์šฉ๋Ÿ‰ ์ด์ƒ์„ ์‚ฌ์š”ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋” ํฐ ๊ณต๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ํ• ๋‹นํ•œ๋‹ค.

ref)