우아한 테크코스/테크코스
[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
반응형