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
Was this helpful?