item 69 . - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μμΈλ₯Ό μ λλ‘ νμ©νλ€λ©΄ νλ‘κ·Έλ¨μ κ°λ μ±, μ λ’°μ±, μ μ§λ³΄μμ±μ΄ λμμ§μ§λ§ μλͺ» μ¬μ©νλ©΄ λ°λμ ν¨κ³Όλ₯Ό μ΄λ
μμΈλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νλ μ§μΉ¨μ λ€λ£¬λ€.
μμΈλ₯Ό μλͺ» μ¬μ©ν μμ
try {
int i=0;
while(true)
range[i++].climb();
} catch (ArrayIndexOutOfBoundsException e) {
}
for (Mountain m : range)
m.climb()
- μλͺ»λ μΆλ‘ μ κ·Όκ±°λ‘ μ±λ₯μ λμ¬λ³΄λ € ν κ²μ΄λ€.
- JVMμ λ°°μ΄μ μ κ·Όν λλ§λ€ κ²½κ³λ₯Ό λμ§ μλμ§ κ²μ¬νλλ°, μΌλ°μ μΈ λ°λ³΅λ¬Έλ λ°°μ΄ κ²½κ³μ λλ¬νλ©΄ μ’ λ£νλ€.
- λ°λΌμ μ΄ κ²μ¬λ₯Ό λ°λ³΅λ¬Έμλ λͺ μνλ©΄ κ°μ μΌμ΄ μ€λ³΅λλ―λ‘ νλλ₯Ό μλ΅ν κ²μ΄λ€.
- μμΈλ μμΈ μν©μ μΈ μ©λλ‘ μ€κ³λμμΌλ―λ‘ JVM ꡬνμ μ μ₯μμλ λͺ νν κ²μ¬λ§νΌ λΉ λ₯΄κ² λ§λ€μ΄μΌ ν λκΈ°κ° μ½νλ€. (μ΅μ νμ λ³λ‘ μ κ²½ μ°μ§ μμμ κ°λ₯μ±μ΄ ν¬λ€)
- μ½λλ₯Ό try-catch λΈλ‘ μμ λ£μΌλ©΄ JVMμ΄ μ μ©ν μ μλ μ΅μ νκ° μ νλλ€.
- λ°°μ΄μ μννλ νμ€ κ΄μ©κ΅¬μμ μμ μ μ ν μ€λ³΅ κ²μ¬λ₯Ό μννμ§ μλλ€. JVMμ΄ μμμ μ΅μ νν΄ μ μ μ€λ€.
μμΈλ₯Ό μ¬μ©ν μͺ½μ΄ νμ€ κ΄μ©κ΅¬λ³΄λ€ ν¨μ¬ λ리λ€. μμ 100κ°μ§λ¦¬ λ°°μ΄λ‘ ν μ€νΈν΄λ³΄λ 2λ°° μ λ λλ Έλ€. μμΈλ₯Ό μ¬μ©ν λ°λ³΅λ¬Έμ΄ ν΄μ μ μ½λλ₯Ό ν·κ°λ¦¬κ² νκ³ μ±λ₯μ λ¨μ΄λ¨λ¦¬λλ°μ λλμ§ μλλ€. μ¬μ§μ΄ μ λλ‘ λμνμ§ μμ μλ μλ€.
- λ°λ³΅λ¬Έ μμ λ²κ·Έκ° μ¨μ΄ μλ€λ©΄ νλ¦ μ μ΄μ μ°μΈ μμΈκ° μ΄ λ²κ·Έλ₯Ό μ¨κ²¨ λλ²κΉ μ ν¨μ¬ μ΄λ ΅κ² ν κ²μ΄λ€.
*** μμ μν©
- λ°λ³΅λ¬Έμ λͺΈμ²΄μμ νΈμΆν λ©μλκ° λ΄λΆμμ κ΄λ ¨ μλ λ°°μ΄μ μ¬μ©νλ€κ° ArrayIndexOutOfBoundsException μ μΌμΌμΌ°λ€κ³ ν΄λ³΄μ. νμ€ κ΄μ©κ΅¬ μλ€λ©΄ μ΄ λ²κ·Έλ μμΈλ₯Ό μ‘μ§ μκ³ (μ€ν μΆμ μ 보λ₯Ό λ¨κΈ°κ³ ) ν΄λΉ μ€λ λλ₯Ό μ¦κ° μ’ λ£μν¬ κ²μ΄λ€.
- λ°λ©΄ μμΈλ₯Ό μ¬μ©ν λ°λ³΅λ¬Έμ λ²κ·Έ λλ¬Έμ λ°μν μλ±ν μμΈλ₯Ό μ μμ μΈ λ°λ³΅λ¬Έ μ’ λ£ μν©μΌλ‘ μ€ν΄νκ³ λμ΄κ°λ€.
*** κ΅ν
- μμΈλ (κ·Έ μ΄λ¦μ΄ λ§ν΄μ£Όλ―) μ€μ§ μμΈ μν©μμλ§ μ¨μΌ νλ€. μ λλ‘ μΌμμ μΈ μ μ΄ νλ¦μ©μΌλ‘ μ°μ¬μ μ λλ€.
- μ΄ μμΉμ API μ€κ³μλ μ μ©λλ€. μ μ€κ³λ APIλΌλ©΄ ν΄λΌμ΄μΈνΈκ° μ μμ μΈ μ μ΄ νλ¦μμ μμΈλ₯Ό μ¬μ©ν μΌμ΄ μκ² ν΄μΌ νλ€.
- νΉμ μνμμλ§ νΈμΆν μ μλ 'μν μμ‘΄μ ' λ©μλλ₯Ό μ 곡νλ ν΄λμ€λ 'μν κ²μ¬' λ©μλλ ν¨κ» μ 곡ν΄μΌ νλ€.
Iterator μΈν°νμ΄μ€μ nextμ hasNextκ° κ°κ° μν μμ‘΄μ λ©μλμ μν κ²μ¬ λ©μλμ ν΄λΉνλ€. λ³λμ μν κ²μ¬ λ©μλ λλΆμ λ€μκ³Ό κ°μ νμ€ for κ΄μ©κ΅¬λ₯Ό μ¬μ©ν μλ μλ€. (for-eachλ λ΄λΆμ μΌλ‘ hasNextλ₯Ό μ¬μ©νλ€.)
for (Iterator<Foo> i = collection.iterator(); i.hasNext();) {
Foo foo = i.next();
}
Iteratorκ° hasNextλ₯Ό μ 곡νμ§ μμλ€λ©΄ κ·Έ μΌμ ν΄λΌμ΄μΈνΈκ° λμ ν΄μΌλ§ νλ€.
// 컬λ μ μ μ΄λ° μμΌλ‘ μννμ§ λ§ κ² try {
Iterator i = collection.iterator(); While(true) { Foo foo = i.next(); } } catch (NoSuchElementException e) { }
λ°λ³΅λ¬Έμ μμΈλ₯Ό μ¬μ©νλ©΄ μ₯ν©νκ³ ν·κ°λ¦¬λ©° μλλ λλ¦¬κ³ μλ±ν κ³³μμ λ°μν λ²κ·Έλ₯Ό μ¨κΈ°κΈ°λ νλ€.
- μΈλΆ λκΈ°ν μμ΄ μ¬λ¬ μ€λ λκ° λμμ μ κ·Όν μ μκ±°λ μΈλΆ μμΈμΌλ‘ μνκ° λ³ν μ μλ€λ©΄ μ΅μ λμ΄λ νΉμ κ°μ μ¬μ©νλ€. μν κ²μ¬ λ©μλμ μν μμ‘΄μ λ©μλ νΈμΆ μ¬μ΄μ κ°μ²΄μ μνκ° λ³ν μ μκΈ° λλ¬Έμ΄λ€.
- μ±λ₯μ΄ μ€μν μν©μμ μν κ²μ¬ λ©μλκ° μν μμ‘΄μ λ©μλμ μμ μΌλΆλ₯Ό μ€λ³΅ μννλ€λ©΄ μ΅μ λμ΄λ νΉμ κ°μ μ ννλ€.
- λ€λ₯Έ λͺ¨λ κ²½μ°μ μν κ²μ¬ λ©μλ λ°©μμ΄ μ‘°κΈ λ λ«λ€κ³ ν μ μλ€. κ°λ μ±μ΄ μ΄μ§ λ μ’κ³ μλͺ» μ¬μ©νμ λ λ°κ²¬νκΈ°κ° μ½λ€.