ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] For문(For Loop / Enhanced For Loop / For Each)
    우아한 테크코스/테크코스 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

    반응형

    댓글

Designed by Tistory.