-
[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
반응형'우아한 테크코스 > 테크코스' 카테고리의 다른 글
[아키텍처 패턴] MVC 모델2 (0) 2020.02.20 [Java] String 연결 (0) 2020.02.19 자바 빈(Java Bean)이란? (0) 2020.02.18 d2 coding 글꼴 적용(맥 / 인텔리제이) (0) 2020.02.18 [Java] UnsupportedOperationException - 배열 asList 관련 에러 (0) 2020.02.17