빠에야는 개발중

String, StringBuffer, StringBuilder 본문

공부/JAVA

String, StringBuffer, StringBuilder

빠에야좋아 2018. 3. 17. 14:28

String

일반적으로 자주 사용되는 String은 불변 객체로서 그 내용이 바뀌지 않고 +, concat 등 문자열 연결을 하게 되면 새로운 객체를 생성하여 연결된 문자열을 할당하고 기존 문자열은 가비지 컬렉터에 의해 회수된다. 그렇기 때문에 여러 입력을 받았을 때 성능 이유가 발생한다.

StringBuffer, StringBuilder

StringBuffer와 StringBuilder는 불변 객체인 String의 한계를 극복하기 위해 등장한 가변 객체이다. 즉 문자열을 추가하면 기존 객체에 버퍼 크기를 늘려 문자열을 더하는 연산만 하는 것이다. 이로써 성능 이슈를 해결할 수 있게 된다.


그렇다면 두 클래스의 차이는 무엇일까? 그것은 “동기화 여부”이다. StringBuffer는 synchronized 키워드가 달려있어 동기화를 지원한다. 하지만 그만큼 오버헤드가 발생하므로 성능 이슈가 발생한다. 따라서 다중 스레드 환경일때는 StringBuffer를, 단일 스레드 환경이라면 StringBuilder를 사용하는 것이 좋다.

추가

JDK 1.5 버전 이후부터는 String을 사용하더라도 StringBuilder로 처리하도록 변경이 되었다고 한다. 이로서 단일 스레드 환경에서는 큰 성능 차이가 없을 것으로 예상된다. 하지만 사용의 편의성 등의 차이로 인해 선택적 사용이 요구된다.

'공부 > JAVA' 카테고리의 다른 글

OSIV  (401) 2020.10.28
N+1 문제  (0) 2020.10.28
CAS(Compare And Swap) 알고리즘  (0) 2020.08.06
abstract class와 interface  (0) 2018.03.17
스트림 api  (0) 2018.03.01
Comments