프로그램 아키텍쳐/Refactoring

반복문 사용시 성능 향상 방법

본클라쓰 2010. 12. 9. 13:46

 

반복문 안에 배열 사용을 자제하기

 

배열에 접근할 때는 경계 검사(Bound Checking, 배열의 범위를 벗어난 접근이 있는가를 확인)를 하므로, 반복문 안에 배열을 사용하는 것보다 임시 변수를 사용할 수 있다면 임시 변수를 사용하는 것이 바람직하다.

 

for ( int I = 0 ; I < repeat ; I++ ) {

    count[0] += 10;

}

 

위와 같은 코드는 아래처럼 변경한다.

 

for ( int 1 = 0; I < repeat; I++ ) {

    value += 10;

}

count[0] = value;

 

 

 

   

반복문 종료조건으로 메소드 호출을 사용하지 않기

 

메소드 호출을 사용해 반복문의 종료 조건을 작성하면 메소드의 조건을 검사하는 시간이 있기 때문에 반복문 수행이 느려진다. 이럴 때는 임시 변수를 사용해 종료 조건을 명확하게 작성하는 것이 바람직하다.

 

for ( int i = 0 ; I < x.length() ; I++ )

  

위와 같은 코드를 아래와 같이 변경한다.

 

int max = x.length();

for( int I= 0 ; I < max ; I++)

 

 

 

 

 

반복문에서 계산되는 부분을 밖으로 뺄수 있음 빼버린다

 

반복문에서 한번만 계산되는 식이나 밖으로 뺄 수 있는 계산은 반복문 밖에서 수행하는 것이 바람직하다.

 

for ( int a = 0 ; a < x.length ; a++ ) {

    arr[a] = x * Math.abs(y);

}

 

위와 같은 코드를 아래와 같이 변경한다.

 

int ABS = Math.abs(y);

for ( int a = 0; a<x.length ; a++) {

    arr[a] = x * ABS;

}

 

또한, 반복문 안에 조건식이 있을 경우에는 가장 빈번하게 발생할 수 있는 조건을 가장 앞에 둔다.