본문 바로가기

Insight for 기획/서비스 기획

for문에 날개를 달아 더 빠르게 만들기

출처 : www.DefineJava.net

For문을 더욱더 빠르게~



1. 임시로 데이터를 저장한다.
for(int i=0; i<10; i++)
{
 countArr[0] += 10;
}

위와 같은 경우 반복문이 돌때마다 배열에 접근하게 된다.
이 경우 JVM이 배열 요소에 접근이 가능 Index인지 검사를 하므로 그 만큼 속도가 느려지게 된다.
int temp = countArr[0];
for(int i=0; i<10; i++)
{
 temp  += 10;
}
countArr[0] = temp;

2. 비교값에 메소드를 사용하지 말라.
for(int i=0; i<list.size(); i++)
위의 예제에서 보면 종료 조건이 i<list.size() 즉 리스트의 size를 가져오는 메소드를 호출 시킨다.
이 경우 반복 될때마다 size() 메소드를 호출 시키므로 그 만큼 속도가 느려질 수 있다.
int cnt = list.size();
for(int i=0; i < cnt; i++)

3. 반복문 내에 객체와 객체를 비교 할 때는 캐논화 하여 사용한다.
반복문 안에서 If문을 쓰는 경우가 많다. 그 중 객체와 객체를 비교 할 때는 일반적으로 캐논화하여 사용하는것이 더 빠르다.
if(object.getClass().getName().equals(java.lang.String"))

Application을 제작 하다 보면 위와 같이 비교를 많이 해야 될수도 있다. 그럴경우 static과 final을 이용하여 미리 한 객체에 선언해 두고 이것을 가져다 쓰는것이 훨씬 효율적이다.

public static final Class STRING_CLASSNAME = java.lang.String.class;
if(object.getClass() == STRING_CLASSNAME)

사실 필자도 캐논화를 잘 하지는 않는다-.-;;

4. 반복문에서 배열에 접근할 때.
for(int i=0; i<10; i++)
{
System.out.println(strArray[i]);
}
가장 일반적인 예이다. 이것은 어떠한가?
for(int i=0; i<10;)
{
System.out.println(strArray[i++]);
}
사실 이 코드는 위에 것과 별 차이가 없다. 혹시나마 이걸 보고 "아 이러면 빠르겠구나~" 하고 생각한 사람이 있다면 다시 잘 생각해 보길 바란다.-_-

태그