엮인글을 보면 무조건 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로 자동변경작업을 해주기도 합니다.)

+ Recent posts