μ°ν
μ½ Level 1 λ‘λ λ―Έμ
μμ βλ°°μ΄ λμ ArrayListλ₯Ό μ¬μ©νλ€.βκ° μꡬμ¬νμ λ€μ΄μμλ€.
μ λ°°μ΄λμ ArrayListλ₯Ό μ¬μ©νλΌλ κ²μΌκΉ?
μ°Ύμ보λ μ΄νν°λΈ μλ°μμλ κ·Έ λ΄μ©μ΄ λμ μμ΄μ μ€μ€λ‘μ λ¬Όμμ λ΅νλ λ΄μ©μ μ 리νλ € νλ€.
Array(λ°°μ΄) vs ArrayList(리μ€νΈ)
λ€μ΄κ°κΈ°μ μμ μ΄νν°λΈ μλ°λ₯Ό 보기 μ Arrayκ³Ό ArrayListμ μ°¨μ΄μ μ κ°λ¨ν μ μ΄λ³Έλ€.
Array(λ°°μ΄)
- μ¬μ΄μ¦κ° μ μ μΈ λ°μ΄ν° ꡬ쑰μ΄λ€. μΌλ¨ μμ±λλ©΄ ν¬κΈ°λ₯Ό λ³κ²½ν μ μλ€.
- μμ νμ κ³Ό κ°μ²΄ λͺ¨λ μμλ‘ ν¬ν¨ν μ μλ€.
for
λλfor-each
루νλ₯Ό ν΅ν΄μ λ°λ³΅λλ€.- κΈΈμ΄μ λν΄
length
λ³μλ₯Ό μ¬μ©νλ€. - Generic(μ λ€λ¦)μ μ¬μ© ν μ μλ€.
- μμλ₯Ό ν λΉνκΈ° μν΄ ν λΉ μ°μ°μ
=
λ₯Ό μ¬μ©νλ€.
ArrayList(리μ€νΈ)
- μ¬μ΄μ¦κ° λμ μΈ λ°μ΄ν° ꡬ쑰μ΄λ€. μ©λμ μ΄κ³Όνλ μμλ₯Ό μΆκ°νλ©΄ ν¬κΈ°κ° μλμΌλ‘ μ¦κ°νλ€.
- κ°μ²΄ μμλ§ ν¬ν¨ν μ μλ€.
- μμλ₯Ό λ°λ³΅νλ iteratorsλ₯Ό μ 곡νλ€.
- κΈΈμ΄μ λν΄
size()
λ©μλλ₯Ό μ¬μ©νλ€. - Generic(μ λ€λ¦)μ μ§μνλ€.
- μμλ₯Ό ν λΉνκΈ° μν΄
add()
λ©μλλ₯Ό μ¬μ©νλ€. - Collectionsκ° μ 곡νλ λ€μν λ©μλλ€μ μ¬μ©ν μ μλ€.
Effective Java item 28
λ°°μ΄κ³Ό μ λ€λ¦ νμ μ μ°¨μ΄
λ°°μ΄μ 곡λ³μ΄λ€.
Sub
κ° Super
μ νμ νμ
μ΄λΌλ©΄ λ°°μ΄ Sub[]
λ Super[]
μ νμ νμ
μ΄ λλ€.
μ¦ ν¨κ» λ³νλ€λ λ§μ΄λ€.
νμ§λ§ μ λ€λ¦μ λΆκ³΅λ³μΌλ‘ μλ‘ λ€λ₯Έ νμ
Type1
, Type2
κ° μμ λ,
List<Type1>
μ List<Type2>
μ νμ νμ
λ, μμ νμ
λ μλλ€.
곡λ³μ΄ μ λ¬Έμ κ° λμ§?
μλ μ½λλ λ¬Έλ²μ νμ©μ λμ§λ§ λ°νμμ μ€ν¨νλ€.
Object[] objectArray = new Long[1];
/* ArrayStoreException λ°μ */
objectArray[0] = "νμ
μ΄ λ¬λΌ λ£μ μ μμ";
λ μλ μ½λλ μ»΄νμΌ μ€λ₯λ₯Ό μΌμΌν¨λ€.
List<Object> objectList = new ArrayList<Long>();
objectList.add("νμ
μ΄ λ¬λΌ λ£μ μ μμ");
λ μ½λ λͺ¨λμμ Longμ© μ μ₯μμ Stringμ λ£μ μ μλ€.
λ°°μ΄μ μ΄λ₯Ό λ°νμμ μκ² λμ§λ§ 리μ€νΈλ μ»΄νμΌ λ λ°λ‘ μ μ μλ€.
λ°°μ΄μ μ€μ²΄νλλ€.
λ°°μ΄μ λ°νμμλ μμ μ΄ λ΄κΈ°λ‘ ν μμμ νμ
μ μΈμ§νκ³ νμΈνλ€.
λλ¬Έμ Longμ© μ μ₯μμ Stringμ λ£μΌλ € νλ©΄ ArrayStoreExceptionμ λ°μμν¨λ€.
νμ§λ§ μ λ€λ¦μ νμ
μ λ³΄κ° λ°νμμλ μκ±°λλ€.
μ΄λ μμμ νμ
μ μ»΄νμΌ νμμλ§ κ²μ¬νλ©° λ°νμμλ μ μ μλ€λ κ²μ΄λ€.
μ¬κΈ°μ νμ
μ 보μ μκ±°λΌ ν¨μ μ λ€λ¦μ΄ μ§μλκΈ° μ
λ κ±°μ μ½λμ μ λ€λ¦ νμ
μ ν¨κ» μ¬μ©ν μ μκ² ν΄μ€λ€.
μ λ€λ¦ λ°°μ΄μ λ§λ€μ§ λͺ»νκ² ν μ΄μ ?
κ·Έ μ΄μ λ νμ
μμ νμ§ μκΈ° λλ¬Έμ΄λ€.
μ λ€λ¦ λ°°μ΄μ νμ©νλ€λ©΄ μ»΄νμΌλ¬κ° μλ μμ±ν νλ³ν μ½λμμ λ°νμμ ClassCastExceptionμ΄
λ°μν μ μλλ°, μ΄λ λ°νμμ μ΄ μμΈκ° λ°μνλ μΌμ λ§κ² λ€λ μ λ€λ¦ νμ
μμ€ν
μ·¨μ§μ λ²μ΄λλ€.
List<String>[] stringLists = new List<String>[1]; // (1)
List<Integer> intList = List.of(42); // (2)
Object[] objects = stringLists; // (3)
objects[0] = intList; // (4)
String s = stringLists[0].get(0); // (5)
λ§μ½ (1)μ΄ νμ©λλ€λ©΄ (2)λ μμκ° νλμΈ List<Integer>
λ₯Ό μμ±νλ€.
(3)μ (1)μμ μμ±ν List<String>
μ λ°°μ΄μ Object
λ°°μ΄μ ν λΉνλ€.
λ°°μ΄μ 곡λ³μ΄λ μ무 λ¬Έμ κ° μλ€.
(4) λ²μ (2)μμ μμ±ν List<Integer>
μ μΈμ€ν΄μ€λ₯Ό Object
λ°°μ΄μ 첫 μμλ‘ μ μ₯νλ€.
μ λ€λ¦μ λ°νμ μμ μμ νμ
μ 보λ₯Ό μκ±°νλ List<Integer>
μ List
κ° λκ³
List<Integer>[]
λ List[]
κ° λλ€.
λ°λΌμ (4)μμλ ArrayStoreExceptionμ΄ λ°μνμ§ μλλ€.
(5)μμλ List<String>
μΈμ€ν΄μ€λ§ λ΄κ² λ€κ³ μ μΈν stringLists
λ°°μ΄μλ
List<Integer>
μΈμ€ν΄μ€κ° μ μ₯λΌ μλ€.
(5)λ μ΄ λ°°μ΄μ μ²μ 리μ€νΈμμ 첫 μμλ₯Ό κΊΌλ΄λ € νλλ° μ»΄νμΌλ¬λ κΊΌλΈ μμλ₯Ό μλμΌλ‘ StringμΌλ‘
νλ³ν νλλ°, μ΄ μμλ Integer
μ΄λ λ°νμμ ClassCastExceptiondl qkftodgksek.
μ΄λ₯Ό λ§κΈ° μν΄μ μ λ€λ¦ λ°°μ΄ μμ±μ λ§λλ‘ (1)μμ μ»΄νμΌ μ€λ₯λ₯Ό λ΄μΌ νλ€.
μ€μ²΄ν λΆκ° νμ
E
, List<E>
, List<String>
κ°μ νμ
μ μ€μ²΄ν λΆκ° νμ
μ΄λΌ νλ€.
μ λ€λ¦μ νμ
μκ±°λ‘ μΈν΄ μ€μ²΄νλμ§ μμμ λ°νμμλ μ»΄νμΌνμλ³΄λ€ νμ
μ 보λ₯Ό μ κ² κ°μ§λ νμ
μ λ»νλ€.
(맀κ°λ³μν νμ
κ°μ΄λ° μ€μ²΄ν λ μ μλ νμ
μ λΉνμ μ μμΌλμΉ΄λ νμ
λΏμ΄λ€.)
μ 리
λ°°μ΄κ³Ό μ λ€λ¦μλ λ§€μ° λ€λ₯Έ νμ
κ·μΉμ΄ μ μ©λμ΄μ λμ μμ΄ μ°κΈ°λ μ½μ§ μλ€.
λ°°μ΄μ 곡λ³, μ λ€λ¦μ λΆκ³΅λ³μ΄λ€.
μ΄ λ§μ λ°°μ΄μ λ°νμ νμ
μ μμ νμ§λ§ μ»΄νμΌ νμμ μμ νμ§ λͺ»νλ€.
μ λ€λ¦μ κ·Έ λ°λμ΄λ€.
λ¨μν μ¬μ΄μ¦κ° μ μ μΈμ§ λμ μΈμ§μ μ°¨μ΄ λΏλ§ μλλΌ λ°°μ΄κ³Ό 리μ€νΈμλ μ΄λ κ² λ§μ
μ°¨μ΄μ μ΄ μ‘΄μ¬νκ³ μμλ€.
λ§μ½ λμ μμ΄ μ°λ€κ° μ»΄νμΌ μ€λ₯λ κ²½κ³ λ₯Ό λ§λλ©΄, λ¨Όμ λ°°μ΄μ 리μ€νΈλ‘ λμ²νμ!