반복문 성능 비교
반복문에는 크게 for, while 문이 있다. while 문은 잘못하면 무한 루프에 빠지기 쉬우므로 for문을 권장한다.
또한 반복문 안에서 꼭 필요하지 않은 소스는 반복문 밖으로 추출시키도록 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class Sample { public static void main(String args[]) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10000; i++) { list.add(i); } for (int i = 0; i < list.size(); i++) { // #1 System.out.println(list.get(i).toString()); } int size = list.size(); for (int i = 0; i < size; i++) { // #2 System.out.println(list.get(i).toString()); } for (Integer integer : list) { // #3 System.out.println(integer.toString()); } } } | cs |
위와 같은 반복문의 경우, 어떤 것이 가장 빠를까?
빠른 순서로 나열하면 다음과 같다. #2 > #1 > #3
#1처럼 조건식에 list.size()를 사용하면 size() 메소드가 반복 호출된다. #2처럼 변수로 선언하여 사용하는 것이 좋다.
#3은 JDK 1.5부터 지원하는 향상된 for문이다. 배열이나 컬렉션에 저장된 요소들을 별도의 형변환이나 get 메소드가 필요없어 편리하게 처리할 수 있다.
단, 처음부터 끝까지 모든 요소를 반복할 때에 권장한다. 순서를 반대로하거나 특정 요소부터 탐색할 때에 부적절하다.
물론 성능 차이가 얼마나지 않는다. 하지만 규모가 크거나 반복 횟수가 큰 경우 성능에 지장을 줄 수 있다.
'Development > Java' 카테고리의 다른 글
Garbage Collection 과정 (0) | 2018.04.28 |
---|---|
Garbage Collection 용어 정리 (0) | 2018.04.26 |
AES256 암호화 오류 해결 (4) | 2017.10.06 |
List 중복 제거 (0) | 2017.07.13 |
Reflection 클래스 정보 (0) | 2017.07.12 |