import java.awt.event.MouseAdapter;import java.util.Arrays;class Mountain {
public void climb() throws InterruptedException {
Thread.sleep(1000L);
System.out.println("νκ±Έμ~");
}
}
public static void main(String[] args) {
List<Mountain> range = Arrays.asList(new Mountain(), new Mountain(), new Mountain());
for (Mountain m : range) {
m.climb();
}
}
μ΄ μνλ₯Ό μ΅μ ν νλ λ°©λ²μ ?
- JVM μ λ°°μ΄μ μ κ·Όν λ λ§λ€ κ²½κ³λ₯Ό λλμ§ μλλμ§ λ°λ³΅νλ€.
- μΌλ°μ μΈ λ°λ³΅λ¬Έλ λ°°μ΄ κ²½κ³μ λλ¬νλ©΄ μ’ λ£νλ€.
- JVM μμ νλ², Iterator μ hasNext() μ΄λ κ² λλ² κ²μ¬νλ κ²μ λ°λ³΅μ΄λ€ ?
int i = 0;
try {
while (true) {
range[i++].climb();
}
} catch (Exception e) {
}
- μ΄ μ½λλ κ³μ μννλ€κ° λ²μλ₯Ό λ²μ΄λ ArrayIndexOutOfBoundsException μ΄ μΌμ΄λλ©΄ λ°λ³΅μ μ€μ§νλ λ°©λ²μ΄λ€.
- μμΈλ μμΈ μν©μ μΈ μ©λλ‘ μ€κ³λμλ€.
- μ½λλ₯Ό try-catch λΈλ‘ μμ λ£μΌλ©΄ JVM μ΄ μ μ©ν μ μλ μ΅μ νκ° μ νλλ€.
- λ°°μ΄μ μννλ νμ€ κ΄μ©κ΅¬λ μμμ μ€λ³΅μ μΈ κ²μ¬λ₯Ό μννμ§ μλλ€. JVM μ΄ μμμ μ΅μ νν΄μ€λ€.
μ€μ λ‘ λ· λ°©λ²μ΄ ν¨μ¬ λ리λ€.
Mountain[] range = new Mountain[1000000];
System.currentTimeMillis();
κΈ°μ€
μΌλ°μ for-each : 10715
μμΈλ₯Ό μ΄μ©ν λ°λ³΅ : 10075
μ μ»΄ν¨ν°μμλ λΉμ·νμ§λ§, μ£ μμλμ μ»΄ν¨ν°μμλ μμΈλ₯Ό μ¬μ©ν λ°©λ²μ΄ 2λ°° λ리λ€κ³ ν©λλ€.
- μ½λλ₯Ό λλ½κ³ μ±λ₯μ λ¨μ΄λ¨λ¦°λ€.
- λ°λ³΅λ¬Έμ΄ λλ ArrayIndexOutOfBoundsException κ° μλ λ€λ₯Έ μμΈκ° λ°μν΄λ μ μμ μΌλ‘ λ°°μ΄μ λ°λ³΅μ΄ λλμ€ μ κ²μ΄λ€.
μμΈλ μ€μ§ μμΈ μν©μμλ§ μ¨μΌνλ€. μ λ μΌμμ μΈ μ μ΄ νλ¦μ©μΌλ‘ μ°μ¬μ μλλ€.
νμ€μ μ΄κ³ μ½κ² μ΄ν΄λλ κ΄μ©κ΅¬λ₯Ό μ¬μ©ν΄λΌ. μμ μ λ¨Έλ¦¬κ° λ°μ΄λλ€κ³ μ°©κ°νμ§ λ§λΌ.
μ μ€κ³λ API λΌλ©΄ ν΄λΌμ΄μΈνΈκ° μ μμ μΈ μ μ΄ νλ¦μμ μμΈλ₯Ό μ¬μ©ν μΌμ΄ μκ² ν΄μΌ νλ€.
μν μμ‘΄μ λ©μλμ μν κ²μ¬ λ©μλλ₯Ό ν΅ν΄ μ μμ μ μ΄ νλ¦μμλ§ μ¬μ©ν μ μλλ‘ λμμΌνλ€.
- μν μμ‘΄μ λ©μλ : νΉμ μνμμλ§ νΈμΆν μ μλ λ©μλ
- μν κ²μ¬ λ©μλ : μνλ₯Ό κ²μ¬νλ λ©μλ
μμ λ λ©μλλ ν¨κ» μ 곡ν΄μΌνλ€.
μλ₯Ό λ€μ΄, Iterator μΈν°νμ΄μ€μμ μν μμ‘΄μ λ©μλλ next(), μν κ²μ¬ λ©μλλ hasNext()
μ μ νλ¦μ μν΄ μ¬λ°λ₯΄μ§ μμ μνμΌλ, λΉ μ΅μ λμ΄λ null κ°μ νΉμν κ°μ λκΈΈμλ μλ€.
- μ¬λ¬ μ€λ λκ° λμμ μ κ·Όκ°λ₯νκ±°λ μΈλΆμμ μνλ₯Ό λ°κΏ μ μλ€
-> μ΅μ λμ΄λ νΉμ κ°μ μ¬μ©νλ€.
-> μν κ²μ¬ λ©μλμ μν μμ‘΄μ λ©μλμ λμ μ¬μ΄μ κ°μ΄ λ³ν΄λ²λ¦΄ μ μλ€. - μ±λ₯μ΄ μ€μν μν©μμ μν κ²μ¬ λ©μλκ° μν μμ‘΄μ λ©μλμ μΌκ³Ό μ€λ³΅λλ μΌμ νλ€.
-> μ΅μ λμ΄λ νΉμ κ°μ μ¬μ©νλ€. - λ€λ₯Έ λͺ¨λ κ²½μ°μλ μν κ²μ¬ λ©μλ, μν μμ‘΄μ λ©μλλ₯Ό μ 곡νμ.
- μμΈλ₯Ό μ μ νλ¦μμ μ μ΄λ₯Ό μν΄ μ¬μ©νλ©΄ μλλ€.
- λ, μ μ νλ¦μμ μ μ΄νκΈ° μν΄ μμΈλ₯Ό μ¬μ©ν΄μΌνλ API λ₯Ό λ§λ€λ©΄ μλλ€.
- κ·Έλ¬κΈ° μν΄μλ μν μμ‘΄μ λ©μλ, μ΅μ λ, νΉμ κ° λ°νλ±μ λ°©λ²μ μ 곡ν μ μλ€.