실전 Java String 연산 속도 비교

Posted by 친절한 Generic
2017.10.24 07:44 프로그래밍/Java

실전 Java String 연산 속도 비교 StringBuffer

안녕하세요 10년차 개발자 오미즈입니다.

실전에서 String 을 합쳐야 하는 경우가 상당히 많습니다.

대부분의 개발자들은 '+' 연산자를 사용하는 경우가 많은데요. 

프로그램에서 아주 많이 반복되는 경우에는 포퍼먼스에 문제를 야기 시킵니다.

꼭 StringBuffer를 사용하는 습관을 기르시기를 바랍니다.

'+'연산자와 String.format(), StringBuffer 속도체크 예제입니다.


직접 실행해 보세요. 수행시간 체크하기에 좋은 예제이기도 합니다.


package test;


public class stringAppendSpeedTest {

public static void main(String[] args) {


String firstStr = "Hello ";

String secStr   = "world ";

String third = "";

long beginTime = System.currentTimeMillis();

for(int i=0;i<30000;i++)

{

third = third + firstStr + secStr;

}

System.out.print("+ ");

printTime(beginTime, System.currentTimeMillis());


beginTime = System.currentTimeMillis();

for(int i=0;i<30000;i++)

{

third = third + String.format("%s%s",firstStr , secStr);;

}

System.out.print("format ");

printTime(beginTime, System.currentTimeMillis());

StringBuffer sb = new StringBuffer();

beginTime = System.currentTimeMillis();

for(int i=0;i<30000;i++)

{

sb.append(firstStr).append(secStr);

}

System.out.print("StringBuffer ");

printTime(beginTime, System.currentTimeMillis());

}

public static void printTime(long beginTime, long endTime) {

long ms = endTime - beginTime;

float sec = (float) ms / 1000;

float min = (float) sec / 60;


if (min > 1) {

    System.out.println("수행시간: " + min + "(min)");

    

} else if (sec > 1) {

    System.out.println("수행시간: " + sec + "(sec)");

    

} else {

    System.out.println("수행시간: " + ms + "(ms)");

}

}


}



자 결과는 어떻게 나올까요?


+ 수행시간: 2.659(sec)


format 수행시간: 7.141(sec)


StringBuffer 수행시간: 2(ms)



'+' 연산자를 통해 스트링을 합칠경우 2.6 초가 걸렸구요.


format함수를 통해 스트링을 합칠경우는 7.1 초가 걸렸습니다. 


회사 동료가 format이 더 빠를거라고 해서 실험 해봤는데. 오히려 '+'  연산자를 사용하는게 빨랐습니다.


하지만 StringBuffer를 사용하는게 비교도 안될만큼 빠르기 때문에...


스트링을 합쳐야 하는 경우에는 꼭 StringBuffer를 사용해야 합니다.


그리고 주위할 점은 .append("aaa"+"bbb"+"ccc"); 이런식으로 append 안에서 '+' 연산자를 사용하게 되면


도루묵입니다. 계속 .append 함수를 사용하세요.


감사합니다.




이 댓글을 비밀 댓글로

티스토리 툴바