프로그래밍언어/Java

자바(Java) 왜 for-each문을 추천할까?

멍토 2021. 8. 25.

인텔리제이에서 for문으로 작성하다보면 List와 같은 경우는 인덱스를 따로 쓰지 않는이상 for-each문으로 바꾸라고 경고를 한다.

private static void test(List<Integer> numbers) {
        for (int i = 0; i < numbers.size(); i++) {
            System.out.println(numbers.get(i));
        }
    }
'for' loop replaceable with enhanced 'for'

 

왜 그럴까?

그것은 자료구조의 변경을 유연하게 하기위해 인터페이스로 객체를 사용하고 있기 때문이다.

인자로 들어오는 List가 ArrayList인지 LinkedList인지 Vector인지 Stack인지 알 수 없다.

여기서 발생하는 문제점은 바로 List에서 사용하는 get()은 자료구조의 내부 구현에 따라 속도가 현저하게 다르다는 것이다.

 

그 이유는 무엇일까?

LinkedList의 경우 인덱스로 접근하게 될 경우 내부에서 선택한 인덱스까지 다시 순회를 해야한다.

그렇다면 반복문에서 n, 내부에서 다시 탐색하는데 n의 시간이 들어 O(n^2) 시간이 소요된다.

 

그렇다면 for-each문은 이러한 문제를 어떻게 해결할까?

그것은 iterator를 이용하여 요소를 순회하기 때문이다.

(iterator가 무엇인지 궁금하신 분은 따로 공부해보세요)

 

ArrayList나 Array같은 경우는 for문이 조금 더 빠르긴 하나 큰차이는 없었다.

따라서 모든 상황에서 유연하게 대체할 수 있는 for-each문을 쓰라고 한 것이었다.

댓글

💲 광고입니다.