홍이의 개발 노트

Java 문자열 연결 시 방법 본문

개발이야기/자바(java)

Java 문자열 연결 시 방법

코바 2010. 10. 1. 20:43

다 알고 계시겠지만 혹시 모르시는 분들을 위해 글을 적겠습니다.

예전에 문자열 붙일 때 StringBuffer 클래스를 위해 append 메서드를 사용해서 하면 속도가 좋아진다고 아직 많이 쓰시고 계시더군요.

하지만 최근
( JDK5 이 후 )부터는 사정이 바뀌었습니다.

앞으로는 쓰레드 프로그래밍을 하지 않으면 StringBuffer 사용을 하실 일은 거의 없을듯합니다. JDK5이 후에는 StringBuilder라는 클래스가 나오면서 StringBuffer를 대신하게 되었습니다.

두 클래스는 일단
API 부분을 같습니다. 단 다르다면 예전 VectorArrayList차이라고 할까요. StringBuffer는 문자열 붙일 때 동기화가 되고 StringBuilder는 동기화가 되지 않아 속도가 StringBuffer 보다 더 빠르다고 합니다. 사실 그렇게 차이는 나지 않지만 동기화가 필요 없을 때 동기화 하는 StringBuffer 쓸 필요는 없겠죠그래서 동기화 되는 변수가 아닌 이상은 StringBuilder를 사용 하면 될 것 같습니다

하지만 결론은 StringBuffer 대신 StringBuilder를 사용하자는 것은 아닙니다 문자열 연결 할 때는 우리가 가장 익숙한 + 연산자를 사용해서 연결 하는 것이 가장 좋다는 것입니다.

ex) String sql = " select * from " +
dual " + " where 1 = " ;

이런 식으로
sql 문자열을 연결 하는 것이 보기에도 가장 좋고 성능 상으로도 괜찮아 졌습니다.

예전에는 문자열을 붙일 때 마다 객체를 새로 생성한다고 성능이 떨어지는 문제가 있었습니다
JDK5 부터는 컴파일 될 때 StringBuilder를 사용해서 문자열을 연결 하는 부분을 자동으로 최적화 되도록 변경되었습니다. 그렇기 때문에 JDK5부터 문자열을 심플하게 +로 연결 하시면 될 듯합니다.

그럼 부록으로 StringBuilder는 언제 사용 하느냐 하면 for문이나 while문 등을 사용 하여 대량의 문자열을 붙일 때 append를 사용하여 붙이면 속도의 최적화가 이루어 질듯합니다.

더 보너스로 StringBuilder를 선언할 때 완성 될 때 예상 byte를 알고 있는 상태에서 선언을 예제처럼 선언하게 되면 새로 내부적으로 새로 객체 선언 없이 빠르게 문자열을 연결 할 수 있습니다.

e
x) StringBuilder sb = new StringBuilder(예상byte);

물론 동기화가 필요하면
StringBuffer 클래스를 사용해서 하는 것이 좋습니다.

한번더 보너스
sql 문자열 같은 경우 보통 static으로 선언 하여 쓰면 좀 더 속도가 개선 될 수도 있습니다. 메모리는 큰 차이는 없을 겁니다

그럼 즐거운 프로그래밍 라이프가 되시길 바랍니다
.

잘 못된 내용이 있으면 태클 부탁드립니다. ^^