엮인글을 보면 무조건 StringBuffer를 사용해야 한다고 결론을 내릴것 같아서...
물론 많은 경우에 StringBuffer를 사용하는게 바람직하지만,
정적인 TEXT는 String으로 하는게 좋습니다.
String str = "SELECT * "
+ "FROM test_table "
+ "WHERE id = ? ";
StringBuffer sb = new StringBuffer();
sb.append("SELECT * ")
.append("FROM test_table ")
.append("WHERE id = ? ");
만약 위의 경우라면 str 을 추천하겠습니다.
똑똑한 컴파일러가 위의 구문은 한 줄의 문자열로 최적화 해줍니다.
하지만, StringBuffer를 사용하게 되면...런타임시에 동적으로 작업하게 됩니다.
아래의 예제를 돌린 결과입니다.
-----------------------------------------------------------------------------------------
[String]
1828888/2031616
10
1828888/2031616
[StringBuffer]
1828656/2031616
110
1640856/2031616
-----------------------------------------------------------------------------------------
/*
* StringTest.java
*
* Created on 2006년 5월 17일 (수), 오전 9:51
*/
/**
*
* @author Administrator
*/
public class StringTest {
/** Creates a new instance of StringTest */
public StringTest() {
}
public String getString() {
String str = "SELECT * "
+ "FROM test_table "
+ "WHERE id = ? ";
return str;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
long start = System.currentTimeMillis();
StringTest st = new StringTest();
for(int i=0; i < 30000; i++) {
st.getString();
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
}
}
----------------------------------------------------------------------------------
/*
* StringBufferTest.java
*
* Created on 2006년 5월 17일 (수), 오전 9:51
*/
/**
*
* @author Administrator
*/
public class StringBufferTest {
/** Creates a new instance of StringBufferTest */
public StringBufferTest() {
}
public String getString() {
StringBuffer sb = new StringBuffer();
sb.append("SELECT * ")
.append("FROM test_table ")
.append("WHERE id = ? ");
return sb.toString();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
long start = System.currentTimeMillis();
StringBufferTest st = new StringBufferTest();
for(int i=0; i < 30000; i++) {
st.getString();
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
}
}
----------------------------------------------------------------------------------
* 위의 메소드인 getString()에 어떤값을 넣어서 문자열을 생성하는 동적인 처리인 경우에는 엮인글의
내용처럼 StringBuffer가 더 좋을 가능성이 많습니다.
(그렇지만...String에 대한 최적화가 많이 이루어져서...
동적인 경우에도 StringBuffer로 자동변경작업을 해주기도 합니다.)
물론 많은 경우에 StringBuffer를 사용하는게 바람직하지만,
정적인 TEXT는 String으로 하는게 좋습니다.
String str = "SELECT * "
+ "FROM test_table "
+ "WHERE id = ? ";
StringBuffer sb = new StringBuffer();
sb.append("SELECT * ")
.append("FROM test_table ")
.append("WHERE id = ? ");
만약 위의 경우라면 str 을 추천하겠습니다.
똑똑한 컴파일러가 위의 구문은 한 줄의 문자열로 최적화 해줍니다.
하지만, StringBuffer를 사용하게 되면...런타임시에 동적으로 작업하게 됩니다.
아래의 예제를 돌린 결과입니다.
-----------------------------------------------------------------------------------------
[String]
1828888/2031616
10
1828888/2031616
[StringBuffer]
1828656/2031616
110
1640856/2031616
-----------------------------------------------------------------------------------------
/*
* StringTest.java
*
* Created on 2006년 5월 17일 (수), 오전 9:51
*/
/**
*
* @author Administrator
*/
public class StringTest {
/** Creates a new instance of StringTest */
public StringTest() {
}
public String getString() {
String str = "SELECT * "
+ "FROM test_table "
+ "WHERE id = ? ";
return str;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
long start = System.currentTimeMillis();
StringTest st = new StringTest();
for(int i=0; i < 30000; i++) {
st.getString();
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
}
}
----------------------------------------------------------------------------------
/*
* StringBufferTest.java
*
* Created on 2006년 5월 17일 (수), 오전 9:51
*/
/**
*
* @author Administrator
*/
public class StringBufferTest {
/** Creates a new instance of StringBufferTest */
public StringBufferTest() {
}
public String getString() {
StringBuffer sb = new StringBuffer();
sb.append("SELECT * ")
.append("FROM test_table ")
.append("WHERE id = ? ");
return sb.toString();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
long start = System.currentTimeMillis();
StringBufferTest st = new StringBufferTest();
for(int i=0; i < 30000; i++) {
st.getString();
}
long stop = System.currentTimeMillis();
System.out.println(stop - start);
System.out.print(rt.freeMemory());
System.out.println("/" + rt.totalMemory());
}
}
----------------------------------------------------------------------------------
* 위의 메소드인 getString()에 어떤값을 넣어서 문자열을 생성하는 동적인 처리인 경우에는 엮인글의
내용처럼 StringBuffer가 더 좋을 가능성이 많습니다.
(그렇지만...String에 대한 최적화가 많이 이루어져서...
동적인 경우에도 StringBuffer로 자동변경작업을 해주기도 합니다.)
'IT > Language' 카테고리의 다른 글
[JAVA] 숫자를 화폐단위로 변경 (0) | 2007.06.29 |
---|---|
[JAVA] 날짜 구하기 팁 (0) | 2007.06.29 |
[JAVA] 문자열중에 한글체크하기 정말 쉬워요. - getType (0) | 2007.06.29 |
[JAVA] ResultSet 에 대한 레코드 건수 알아내기 (0) | 2007.06.29 |
[JAVA] 디렉토리 & 파일 삭제 (0) | 2007.06.29 |