조건문과 반복문의 속도

1 분 소요

1. if문 개수에 따른 속도차이

결론적으로 if문의 개수에 따른 실행속도의 차이는 무시해도 될 만큼 작다.
if문 자체보다 if문에 들어가는 조건을 비교하는 구문이 얼마나 빠르냐가 성능을 좌우한다.

2. switch-case 문에서의 String 비교

JDK 6까지 switch문에서 사용할 수 있는 타입은 정수형 타입과 enum 타입이었고, JDK 7부터는 문자열까지 지원을 하게 되었다.

JDK 7에서는 String을 비교할때 Object 클래스에 있는 hashCode() 메서드를 사용한다. 즉, String을 정수로 나타낸 HashCode 값이 동일한지 비교하는 것이다.

switch-case 문에서 문자열을 지원하는 것도 이 hashCode값을 비교한다.

3. switch-case 문의 속도

switch-case 문의 경우 작은숫자에서 큰숫자순서로 비교하는 것이 속도가 빠르다.

컴파일된 class 파일을 javap를 통해 디어셈블 해보면 switch 문의 내용을 볼 수 있는데, 내부에 작은 숫자부터 정렬되어 있는것을 볼 수 있다.

큰 차이는 없으니 참고정도로만 알아두면 되겠다.

4. 반복문 사용에 따른 속도차이

3가지 방법을 비교해본다.

 // 1. 반복 조건에서 리스트 사이즈를 찾는 경우 (좋지 않은 습관)
 for(int i=0; i<list.size(); i++) {
 	resultProcess(list.get(i));
 }
 
 // 2. 반복 조건을 미리 계산한 경우 (좋은 습관)
 int loopSize = list.size();
 for(int i=0; i<loopSize; i++) {
 	resultProcess(list.get(i));
 }
 
 // 3. for-each 구문
 for(String value : list) {
 	resultProcess(value);
 }

자바 성능 튜닝 이야기에서 테스트된 내용에 따르면 반복문이 10만번일때 결과는 아래와 같다.

방법 응답 시간(마이크로초)
방법 1 (반복 조건에서 사이즈 찾기) 413
방법 2 (반복 조건 미리 계산) 410
방법 3 (for-each 문) 481

의외로 1,2 는 크게 차이가 나지 않고, 방법 3이 속도가 느리다.


[참고 문서]

  • 도서 자바 성능 튜닝 이야기

카테고리:

업데이트:

댓글남기기