일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링 부트
- @MVC
- WebApplicationInitializer
- Multi DataSource
- 스프링
- Spring Boot
- mybatis
- 인텔리J
- spring camp
- spring
- apache thrift
- spring test mvc
- OAuth2.0
- spring boot devtools
- spring-mybatis
- 데브툴즈
- spring boot mybatis
- Spring MVC
- Fiilter
- spring cloud config
- KSUG
- OAuth 2.0
- 스프링시큐리티
- spring cloud
- spring boot 1.3
- ServletContextInitializer
- spring security
- devtools
- Spring Security OAuth
- elasticache
- Today
- Total
홍이의 개발 노트
Java 문자열 연결 시 방법 본문
다 알고 계시겠지만 혹시 모르시는 분들을 위해 글을 적겠습니다.
예전에 문자열 붙일 때 StringBuffer 클래스를 위해 append 메서드를 사용해서 하면 속도가 좋아진다고 아직 많이 쓰시고 계시더군요.
하지만 최근 ( JDK5 이 후 )부터는 사정이 바뀌었습니다.
앞으로는 쓰레드 프로그래밍을 하지 않으면 StringBuffer 사용을 하실 일은 거의 없을듯합니다. JDK5이 후에는 StringBuilder라는 클래스가 나오면서 StringBuffer를 대신하게 되었습니다.
두 클래스는 일단 API 부분을 같습니다. 단 다르다면 예전 Vector와 ArrayList차이라고 할까요. 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를 알고 있는 상태에서 선언을 예제처럼 선언하게 되면 새로 내부적으로 새로 객체 선언 없이 빠르게 문자열을 연결 할 수 있습니다.
ex) StringBuilder sb = new StringBuilder(예상byte);
물론 동기화가 필요하면 StringBuffer 클래스를 사용해서 하는 것이 좋습니다.
한번더 보너스 sql 문자열 같은 경우 보통 static으로 선언 하여 쓰면 좀 더 속도가 개선 될 수도 있습니다. 메모리는 큰 차이는 없을 겁니다.
그럼 즐거운 프로그래밍 라이프가 되시길 바랍니다.
잘 못된 내용이 있으면 태클 부탁드립니다. ^^