๋ฐ˜์‘ํ˜•

0.๐Ÿšถ๋“ค์–ด๊ฐ€๋ฉฐ

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

 

 Java์˜ Collection ์ค‘ ArrayList ํด๋ž˜์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๊ฐ€๋ณ€์ ์ธ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ์ฃ . ์ฆ‰, ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•  ์‹œ ๋” ํฐ ๋ฐฐ์—ด๋กœ ํ™•์žฅํ•ด์ค๋‹ˆ๋‹ค. 

 

 ์ด ๊ธ€์€ ArrayList๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋ณ€์ ์ธ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ง€์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์—ฌ ์ฐพ์•„๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


1.๐Ÿ“–๋ณธ๋ฌธ

 ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ArrayList ํด๋ž˜์Šค์˜ ์–ด๋Š๊ณณ๋ถ€ํ„ฐ ํ™•์ธํ•ด์•ผํ• ๊นŒ๋ฅผ ๊ณ ๋ฏผํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ คํ•  ๋•Œ ์ƒ๊น๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ArrayList์˜ add ๋ฉ”์„œ๋“œ๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ขŒ์ธก ์‚ฌ์ง„์€ add ๋ฉ”์„œ๋“œ ์ธ์ž์— ๊ฐ์ฒด๋งŒ ๋„˜๊ฒจ์คฌ์„ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ฃ .

์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๋ฉด add(e, elementData, size) ๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋„ค์š”. ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • elementData : elementData๋Š” ArrayList ๋‚ด๋ถ€์— ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๊ฐ์ฒด๋“ค์ด ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค. ArrayList๋„ ๊ฐ์ฒด๋“ค์„ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์ฃ .
  • size : size๋Š” ArrayList ๋‚ด๋ถ€์˜ private ํ•„๋“œ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์— ๋ช‡ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์ฃ .

 ์ด์ œ ์ขŒ์ธก add ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœํ•œ ์šฐ์ธก add ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค. ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ณด์…”์•ผ ํ•˜๋Š” ๊ฒƒ์€ if๋ฌธ์ž…๋‹ˆ๋‹ค.

if๋ฌธ์—์„œ s == elementData.length ๋ผ๋ฉด grow() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๋˜์–ด์žˆ๋„ค์š”. ์ด ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ๋ฐฐ์—ด์„ ํ™•์žฅ์‹œ์ผœ์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. 

 

 ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ grow() ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค!

 ์ขŒ์ธก ์‚ฌ์ง„์˜ grow() ๋ฉ”์„œ๋“œ return ๊ฐ’์„ ๋ณด๋ฉด grow(size + 1)์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ฆฌํ„ดํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋„ค์š”! ์—ฌ๊ธฐ์„œ size๋ผ ํ•จ์€ ArrayList์— ๋“ค์–ด์žˆ๋Š” ๊ฐ์ฒด์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. (size + 1)์ด๋ผ๋Š” ์ธ์ž๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ• ์ง€ intํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” growํ•จ์ˆ˜๋ฅผ ์ฐพ์•„๊ฐ€ ๋ด…์‹œ๋‹ค!

 

 ๋ฐ”๋กœ ์šฐ์ธก ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค. return ๊ฐ’์„ ๋ณด๋ฉด Arrays.copyOf ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ ์ธ์ž์— newCapacity(minCapacity)๋ฅผ ๋„ฃ์–ด์ค€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ ์ƒํ™ฉ์—์„œ๋Š” newCapacity(size + 1)์ด ๋“ค์–ด๊ฐ”๊ฒ ์ฃ ? copyOf ํ•จ์ˆ˜๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ž ํฌ๊ธฐ๋งŒํผ ๋ฐฐ์—ด์„ ๋งŒ๋“  ํ›„ ์ฒซ ๋ฒˆ์งธ ์ธ์ž์—์„œ ๋ฐ›์€ ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ArrayList๊ฐ€ ๊ฝ‰ ์ฐผ์„ ๋•Œ ๋ฐฐ์—ด ๊ณต๊ฐ„์„ ๋Š˜๋ ค์ฃผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 ์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ๋งŒ ๋” ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๊ณต๊ฐ„์„ ๋Š˜๋ ค์ฃผ๊ธฐ๋Š” ํ•˜๋Š”๋ฐ ์–ผ๋งˆ๋งŒํผ ๋Š˜๋ ค์ฃผ๋Š” ๊ฑธ๊นŒ? ์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด newCapacity๋ฅผ ๋”ฐ๋ผ๊ฐ€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 newCapacity๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๋ณด๋ฉด (์ด์ „ ๋ฐฐ์—ด ํฌ๊ธฐ) + (์ด์ „ ๋ฐฐ์—ด ํฌ๊ธฐ / 2)์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ 1.5๋ฐฐ ์ •๋„๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

 ๊ฒฐ๋ก ์€ ArrayList์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€๋ณ€์ ์ผ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ArrayList๊ฐ€ ๊ฝ‰ ์ฐผ์„ ๋•Œ ์•ฝ 1.5๋ฐฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๋Š” ๋กœ์ง์ด ๋‚ด๋ถ€์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋ผ๊ณ  ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 


 # ์ถ”๊ฐ€๋กœ,,

ArrayList๊ฐ€ ํ™•์žฅ๋  ๋•Œ ์ƒ๊ธฐ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์ฒœ ๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ArrayList์— ๋„ฃ์–ด ๋น„๊ตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋น„๊ต๊ตฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋งŒ๋“  ArrayList์™€ ์ดˆ๊ธฐ ๊ณต๊ฐ„์„ ์„ค์ •ํ•ด์ค€ ๋’ค ๋งŒ๋“  ArrayList
  • ๋‘ ArrayList์— 10,000,000๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ด๋ณด๊ณ  ์†Œ์š”๋œ ์‹œ๊ฐ„์„ ๋น„๊ตํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 ๊ฒฐ๊ณผ๋ฅผ ๋ณด์‹œ๋ฉด ์‚ฝ์ž… ์‹œ๊ฐ„์ด 5๋ฐฐ ์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚ฌ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐ„ ํ™•์žฅ์„ ํ•˜๋Š๋ผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฑ ๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๊ฒฝ์šฐ๋„ ์•ฝ 2๋ฐฐ ์ •๋„์˜ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.


2.๐Ÿ’จ๋‚˜๊ฐ€๋ฉฐ

 ์˜ค๋Š˜์€ ์ž๋ฐ”์˜ ArrayList๋Š” ์–ด๋–ป๊ฒŒ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ผ๊นŒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•ด๋‘๋ฉด ArrayList๊ฐ€ ํ™•์žฅ๋  ๋•Œ ์–ด๋–ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์„์ง€ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋ฅผ ๊ณ ๋ คํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์€ ๋‚ด์šฉ์ด๊ณ  ๋งŽ์ด ์“ฐ์ด๋Š” ๋‚ด์šฉ์ธ ๋งŒํผ ํ™•์ธํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

 

๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!