클래스 

사용할 상황 

 String

짧은 문자열을 더할 경우 사용한다. 

 StringBuffer

스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하면 좋다. 만약 클래스에 static으로 선언된 문자열을 변경하거나,

singleton으로 선언된 클래스에 문자열일 경우에는 이 클래스를 사용해야만 한다. 

 StringBuilder

스레드에 안전한지의 여부와 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.

만약 메서드 내에 변수를 선언했다면, 해당 변수는 그 메서드 내에서만 살아 있으므로, 

StringBuilder를 사용하면 된다. 


버전에 따른 차이

JDK 5.0 이상을 사용한다면 결과가 약간 달라진다.

public class Test {
	String str = "Here " + "is " + "a " + "sample.";
	public Test() {
		  int n = 10;
		  String s = "Here " + "is " + n + " samples.";
	}
}

JDK 1.4 사용해서 컴파일 -> JAD로 역 컴파일한 소스

public class Test {
	public Test() {
		str = "Here is a sample.";
		int n = 10;
		String s = "Here " + "is " + n + " samples.";
	}
	String str;
}

역 컴파일한 소스를 보면 자바 컴파일러가 문자열 더한 것을 컴파일할 때 알아서 더해 놓고 있다. 그래도 중간에 int나 다른 객체가 들어가게 되면 위의 예와 같이 그대로 더하도록 되어 있다. 어차피 필요 없는 객체는 생성이 된다는 의미이다.

JDK 5.0

public class Test {
	public Test() {
		str = "Here is a samples.";
		int n = 10;
		String s = (new StringBuilder("Here is "))
				.append(n).append(" samples.").toString();
	}
	String str;
}

문자열을 그냥 더하도록 프로그래밍했다면, 컴파일할 때 위와 같이 변환된다. 개발자의 실수를 어느 정도는 피할 수 있게 된다는 뜻이다.


[ 출저 ] - 자바 성능 튜닝 이야기 Page 49 - 56

블로그 이미지

행복그리고..

,