우아한 테크코스/테크코스

[Java] For문(For Loop / Enhanced For Loop / For Each)

jamie. 2020. 2. 19. 20:34
반응형

기존의 For문

for(변수 선언 및 초기화; 조건문; 변수증감연산) 

for(int i = 0; i < 5; i++) {
    // ...
}

향상된 For문(Enhanced For Loop / Foreach Loop)

for(대입받을 변수 선언; 순회하며 대입할 대상)

- 순회하며 대입할 대상을 Iterator의 hasNext()를 이용하여 순회 - Iterartor를 구현하면 사용 가능

List<String> strings = new ArrayList<>();
// ...

for(String string : strings) {
    // ...
}

유의할 점

Iterator를 구현한 객체만 가능함

// Java 파일
void listForEach() {
    List<String> strings = Arrays.asList("d,dd,ddd".split(","));
    for(String string : strings) {
        System.out.println(string);
    }
}

// Class 파일(컴파일 된 파일)
void listForEach() {
    List<String> strings = Arrays.asList("j,am,ie".split(","));
    Iterator var2 = strings.iterator();

    while(var2.hasNext()) {
        String string = (String)var2.next();
        System.out.println(string);
    }
        
}

단, 예외로 배열(Array)의 경우, 향상된 For문을 입력하면 컴파일러가 기존의 For문으로 변환시켜줌

// Java 파일
void test() {
    String[] strings = "j,am,ie".split(",");
    for(String string : strings) {
        System.out.println(string);
    }
}

// Class 파일(컴파일러가 컴파일한 파일)
void test() {
    String[] strings = "j,am,ie".split(",");
    String[] var2 = strings;
    int var3 = strings.length;

    for(int var4 = 0; var4 < var3; ++var4) {
        String string = var2[var4];
        System.out.println(string);
    }

}

Iterable.forEach()

유의할 점

Iterator를 구현한 객체만 가능함

// Java 파일
void test3() {
    List<String> strings = Arrays.asList("j,am,ie".split(","));
    strings.forEach(string -> System.out.println(string));
}

// Class 파일(컴파일러가 컴파일한)
void test3() {
    List<String> strings = Arrays.asList("j,am,ie".split(","));
        strings.forEach((string) -> {
        System.out.println(string)
    });
}

단점

- final이 아닌 변수를 람다에서 사용할 수 없음

- 흐름 제어의 제한

- 병렬로 실행될 수 있음 (병렬로 실행하려면 다른 방법을 추천)

- 성능이 저하될 수 있음

- 스트림은 일반적으로 읽기와 디버깅이 어려움

아래 내용을 잘 읽어보고 꼭 써야겠다 싶으면 사용할 것

 

foreach() 단점 출처 : https://stackoverflow.com/questions/16635398/java-8-iterable-foreach-vs-foreach-loop

반응형