본문 바로가기

IT 관련/java

java for 루프를 더 빠르게 하기

어떤 프로그래밍을 하든 구문 사용은 기본 중의 기본이다. 

하지만 그 반복 구문도 잘만 사용하면 성능 향상을 가져올 수 있다.

어찌 보면 단순하지만, 많은 성능 향상을 가져올 수 있는 반복 구문에 대해서 자세히 알아보자.

 

조건문은 성능에 얼마나 많이 영향을 줄까? 먼저 조건문에 어떤 것들이 있는지 보고,

조건문이 얼마나 성능에 영향을 주는지 알아보자.

조건문의 종류는 다음과 같다.

 

1. if-else if-else

2. switch

 

if문 안에는 boolean 형태의 결과값만 사용할 수 있다. switch문은 byte, short, char, int

이렇게 네 가지 타입을 사용한 조건 분기만 가능하다. 일반적으로 if문에서 분기를 많이 하면

시간이 많이 소요된다고 생각하는데, 아주 잘못된 생각이다. if문 조건 안에 들어가는 비교 구문에서

속도를 잡아먹지 않는 한, if 문장 자체에서는 그리 많은 시간이 소요되지 않는다.

<%

int runCount = 100000;

for(int loop=0; loop<runCount; loop++){

    sw1.start();

    if(loop<50){ 

    }else if(loop<150){

    }else if(loop<250){

    }else if(loop<350){

    }else if(loop<450){

    }else if(loop<550){

    }else if(loop<650){

    }else if(loop<750){

    }else if(loop<850){

    }else if(loop<950){

    }else{

    }

    sw1.stop();

}

out.println("<BR>"+sw1);

%>

여기에 있는 if 문장에서 얼마나 시간이 걸릴 거 같은가요? 결과는 다음과 같습니다.

Run Count : 100000, Total : 215.60ms, Average : 0.002156ms

 

10회의 if 문장을 수행할 때 소요되는 시간은 0.0021ms이다. 다시 말하면,

0.0000021초가 소요된다는 것이다. 이 결과는 로컬 노트북에서 나온것입니다.

이 소스가 유닉스나 윈도우 기반 서버에서 수행된다면 더 빠른 결과가 나올것입니다.

switch 문장도 마찬가지로 빠른 응답 결과가 나옵니다. Sun에 있는 문서를 보면 swtich는 숫자 비교 시,

if보다 가독성이 좋아지므로 정해져 있는 숫자로 분기를 할 때에는 swtich를 권장한다고 되어 있습니다.

 

그러므로 for 루프문에서 if 조건문이 많이 들어가있다고 무조건 느리다. '안좋다'라는 생각을 버리고

정해진 숫자의 경우는 swtich 그렇지 않은 조건에서는 for문을 사용해서 적절한 조건을 걸어서 프로그램을

만들어 주시면 될 거같습니다.

다음에는 이어서 for문을 좀 더 빠르고 간결하게 작성하는 방법에 대해서 작성하겠습니다.

 

그럼 이만.

끝.