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๊ฐ ํ์ฅ๋ ๋ ์ด๋ค ์ค๋ฒํค๋๊ฐ ์กด์ฌํ ์ ์์์ง ์์ํ ์ ์๊ณ ์ด๋ฅผ ๊ณ ๋ คํด์ ์ฝ๋๋ฅผ ์์ฑํด๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๋ด์ฉ์ด๊ณ ๋ง์ด ์ฐ์ด๋ ๋ด์ฉ์ธ ๋งํผ ํ์ธํด๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
'Java & Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] List ์ ๋ ฌ์ ๋ํ์ฌ. (0) | 2022.03.06 |
---|---|
[Java] ๋๊ธฐํ - synchronized์ volatile, Atomic Class์ ๋ํ์ฌ. (0) | 2022.03.06 |
[Java] Garbage Collection(GC)์ ๋ํ์ฌ. (0) | 2022.02.16 |
[Java] JVM์ ๋ํ์ฌ. (0) | 2022.02.15 |
[Java]โ๏ธ๋ง์ปค ์ธํฐํ์ด์ค์ ๋ํ์ฌ. (1) | 2022.02.12 |