학습(구)/Java(구)

자바 성능 튜닝 - 조건/반복문

잉아당 2021. 6. 4. 16:23
728x90

<조건문>

if문의 경우 조건 안에 들어가는 비교 구문에서 속도를 잡아먹지 않는 이상 많은 시간이 소요되지 않습니다.

if의 조건을 만족할때 중괄호 에서 아무런 작업을 하지 않을 경우 JIT(Just In Time) 컴파일러의 최적화 작업에 의해 무시해버릴 수 있습니다.

 

switch의 경우 단순 정해진 숫자 비교시 if문 보다 가독성이 좋아 선호되고 있습니다.

JDK7에서부터 switch에서 String을 비교할 수 있는데 이는 Object클래스의 hashcode()를 오버라이딩 하여 문자열을 int값으로 구분하여 switch-case에서 사용해 비교되어집니다. 

그러므로 모든 case의 String 값을 hascode()를 이용해 변환 후 오름차순으로 정렬하여 String의 equals() 메서드를 이용해 비교하여 값을 찾아 냅니다.  

정렬이 되어져 있기 때문에 작은 수에서 큰 수를 비교하는 것이 가장 빠르며 순차적으로 비교하기 때문에 case의 값이 많을 수록 시간이 오래 걸리게 됩니다.

 

<반복문>

while은 무한 루프에 빠질 위험이 있으므로 주로 for문을 많이 사용합니다.

 

for(int a=0; a<list.size(); a++) 

=> 이렇게 코딩하는 것은 매호출 시 size() 메서드를 호출하기 때문에 성능면에서 좋지 않으므로 다음과 같이 바꿔주는 것이 좋습니다.

 

int size = list.size();

for(int a=0; a<size(); a++)

 

또한 JDK5.0부터 향상된 for문을 사용할 수 있습니다.

ArrayList<String> list = new ArrayList<String>();

for (String a : list)

=> 이렇게 사용할 경우 별도로 변환을 하거나 get()또는 elementAt()을 호출할 필요 없이 순서에 따라 바로 이용할 수 있으므로 편리합니다. 그러나 데이터의 첫번째 값부터 마지막까지 처리해야할 때 유용하고 순서를 거꾸로 돌리거나 특정값 부터 데이터를 탐색하는 경우에는 적절하지 않습니다.

 

그러나 이론과 달리 실제 효율성에서는 큰차이를 보이지 않습니다. 그래도 반복에서 호출하는 부분은 피하는 것이 좋습니다.

 

 

'학습(구) > Java(구)' 카테고리의 다른 글

자바 성능 튜닝 - reflection  (0) 2021.06.05
자바 성능 튜닝 - static  (0) 2021.06.04
자바 성능 튜닝 - 컬렉션  (0) 2021.05.07
자바 성능 튜닝 - 문자열 처리  (0) 2021.04.30
자바 성능 튜닝 - 분석 툴  (0) 2021.04.28