ava for-each에 대해서 쉽게 이해하기
for-each
: jdk 1.5 이후에 추가 된 문법이다. 따로 키워드가 있는 것은 아니다. 기존의 for문을 그대로 사용한다.
코드의 가독성이 좋아지고, 반복자나 변수를 사용하지 않아 오류 가능성을 없앤다.
/**
*
* @author hoTire
*
*/
for (int i = 0; i < 10; i++) {
System.out.println(list.get(i));
}
for (Integer integer : list) {
System.out.println(integer);
}
아래가 for-each 방법이다.
for-each를 구현하기 위해선
public interface Iterable<T> {
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
Iterable 인터페이스를 implements 구현하면 된다.
성능 차이
@Benchmark
public void testFor() {
int[] classicFor = new int[200000000];
int size = classicFor.length;
int a;
for (int i = 0; i< size; i++) {
a = classicFor[i];
}
}
@Benchmark
public void testFor2() {
int[] classicFor = new int[200000000];
int a;
for (int i = 0; i< classicFor.length; i++) {
a = classicFor[i];
}
}
@Benchmark
public void testForEach() {
int[] forEach = new int[200000000];
int a;
for (int n : forEach) {
a = n;
}
}
Benchmark Mode Cnt Score Error Units
MyBenchmark.testFor avgt 5 390.766 ± 42.219 ms/op
MyBenchmark.testFor2 avgt 5 418.466 ± 219.746 ms/op
MyBenchmark.testForEach avgt 5 386.739 ± 47.636 ms/op
for문 안에 size나 length를 알아내는 코드가 있다면 느리다.
계속해서 lenght, size를 알아내는 비용이 발생한다.
크기가 크면 클수록 for-each가 빠르다.
JIT컴파일러가 최적화를 하기 때문이다.
이렇게 좋은 for-each를 사용하지 못할 때가 있다.
1. 필터링(filtering) : 순회하는 도중 특정한 원소를 삭제해야할 경우
2. 변환(transforming) : 순회하는 도중 원소의 값을 수정해야할 경우
3. 병렬순회(parallel iteration) : 병렬적으로 순회할 경우
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA 관련 사이트 기술 커리큘럼 (0) | 2018.07.25 |
---|---|
스트레티지 패턴 (0) | 2018.07.23 |
JAVA 싱글턴 패턴 (0) | 2018.07.19 |
자바 interface(인터페이스) (0) | 2018.07.18 |
JAVA 상속(Override) 재정의, super (0) | 2018.07.17 |