Item 28. List vs Array
๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ผ
์์ดํ ์ ์ฃผ์ ์ฒ๋ผ ๋ฐฐ์ด๋ณด๋ค๋ ๋ฆฌ์คํธ๋ฅผ ์ฐ์ ํด์ผํ์ง๋ง ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ๊ฒ์ ์๋๋ค. ๋ฆฌ์คํธ๋ ๊ฒฐ๊ตญ Java ๊ธฐ๋ณธ ํ์ ์ด ์๋๋ฉฐ(๋ด๋ถ ๊ตฌํ์์ ๋ฐฐ์ด ์ฌ์ฉ), ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ(HashMap)์์๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ์๋ค. ํ์ง๋ง ๊ผญ ๋ฐฐ์ด์ ์ฌ์ฉํด์ผํ๋ ์ํฉ์ด ์๋๋ผ๋ฉด ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ ํ์
์ ์ฐจ์ด
๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ ํ์ ์ฌ์ด์ ํฐ ์ฐจ์ด๋ก๋ ๊ณต๋ณ๊ณผ ์ค์ฒดํ๊ฐ ์๋๋ฐ, ์์ธํ ์์๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๊ณต๋ณ(covariant)
Sub๊ฐ Super์ ํ์ ํ์ ์ด๋ผ๋ฉด ๋ฐฐ์ด Sub[]๋ ๋ฐฐ์ด Super[]์ ํ์ ํ์ ์ด ๋์ง๋ง, ์ ๋ค๋ฆญ ํ์ List๋ List์ ํ์ ํ์ ์ด ๋์ง ์์ผ๋ฉฐ, ์์ ํ์ ๋ ์๋๋ค.
์ด ์ฐจ์ด๋ ์ ์ฝ๋์์ ์ ์ ์๋ฏ์ด ๋ฐฐ์ด์ ๊ณต๋ณ์ ํ์ฉํ์ฌ ๋ฐํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง, ์ ๋ค๋ฆญ์ ์ปดํ์ผ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๋ณด๋ค ์์ ํ๋ค.
์ค์ฒดํ(reify)
๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด์ ์ค์ฒดํ๋๊ณ , ์ ๋ค๋ฆญ์ ์ค์ฒดํ๋์ง ์๋ ์ฐจ์ด๊ฐ ์๋ค. ์ด ์ฐจ์ด๋ก ์ ์ฝ๋์์ ๋ฐ์ํ๋ ์ฐจ์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐฐ์ด: ๋ฐํ์์๋ ์์ ์ด ๋ด๊ธฐ๋ก ํ ์์์ ํ์ ์ ์ธ์งํ๊ณ ํ์ธํ์ฌ
ArrayStoreException
์ ๋ฐ์์ํด์ ๋ค๋ฆญ: ์ ๋ค๋ฆญ์ ํ์ ์ ๋ณด๋ฅผ ์ปดํ์ผ ํ์์๋ง ๊ฒ์ฌํ๊ณ ๋ฐํ์์ ์๊ฑฐ๋๊ธฐ ๋๋ฌธ์ ๋ฐํ์์๋ ํ์ ์ ๋ณด๋ฅผ ์ ์ ์์
E
,List<E>
,List<String>
๊ฐ์ ํ์ ์ ์ค์ฒดํ ๋ถ๊ฐ ํ์ (non-reifiable type)์ด๋ผ๊ณ ํจ์ค์ฒดํ ๋์ง ์์ ๋ฐํ์์ ์ปดํ์ผํ์๋ณด๋ค ํ์ ์ ๋ณด๋ฅผ ์ ๊ฒ ๊ฐ์ง๊ณ ์์
๋งค๊ฐ๋ณ์ํ ํ์ ์ ์ค์ฒดํํ ์ ์๋ ํ์ ์ ๋นํ์ ์ ์์ผ๋์นด๋(
List<?>
,Map<?, ?>
๋ฑ)ํ์ ์ผ๋ก ํ์ ๋จ
์ด์ฒ๋ผ ๊ณต๋ณ/์ค์ฒดํ์ ์์ด ์๋ก ๋ฐ๋๋๋ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๊ณผ ์ ๋ค๋ฆญ์ ์ ์ด์ฐ๋ฌ์ง์ง ๋ชปํ๋ค.
์ ๋ค๋ฆญ ๋ฐฐ์ด
์ด์ฒ๋ผ ์ ์ด์ฐ๋ฌ์ง๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ์ ๋ค๋ฆญ ๋ฐฐ์ด์ ๋ง๋๋ ค๊ณ ์๋ํ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ง์ฝ ์ด๋ฅผ ํ์ฉํ๊ณ 1๋ฒ ๋ผ์ธ ์ฝ๋์์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด์ฒ๋ผ ์์์น ๋ชป ํ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฐ ์ปดํ์ผ๋ฌ์์๋ 1๋ฒ ๋ผ์ธ์ ์ ๋ค๋ฆญ ๋ฐฐ์ด์ ์์ฑํ๋ ์ฝ๋๋ฅผ ์ปดํ์ผ ์๋ฌ๋ก ์ฒ๋ฆฌํ๋ค.
์ค์ฒดํ ๋ถ๊ฐ ํ์
์ค์ฒดํ ๋ถ๊ฐ ํ์ ์ผ๋ก ๋ฐฐ์ด์ ์์ฑํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์์ง๋ง ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ค.(ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋์ง ์์์ ์๋ ค์ค)
์ ์ฝ๋์์๋ ์ ์์ ์ผ๋ก ์ปดํ์ผ ๋๊ณ , ๋ฐํ์์์๋ ๋ฐ์ํ์ง๋ ์์ ์์ ํ๋ค๊ณ ํ์ ํ ์ ์๋ ๊ฒฝ์ฐ์ @SuppressWarnings("unchecked")
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์จ๊ธธ ์ ์๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ๋ณด๋ค๋ ์ฑ๋ฅ ์ ์ํด๋ฅผ ๋ณผ ์ ์์ง๋ง ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๊ณ ์ ์์ธ์ ์ ๊ฑฐํ๋ ๊ฒ์ด ๋ ์ข๋ค.
Last updated