꿈소년의 개발 이야기

String, StringBuilder, StringBuffer 본문

Software Engineering

String, StringBuilder, StringBuffer

꿈소년 2016. 6. 30. 12:06
반응형

저는 가끔 String 관련 클래스가 많다는 생각을 합니다. 아마도 그 만큼 요구되는 바가 많다는 거겠죠.


최근에 코딩 테스트를 했는데 이거 왠걸...

String 계열 클래스는 좀 알아두는게 코딩할 때 좋을 것 같네요.


자, 무슨 차이가 있는지 궁금하기도 하고, 최근에 제가 작업하던 JSON 파싱 관련해서 에러가 난 원인이 바로 이 내용이였기에 공유 합니다.


String 과 스트링버퍼, 스트링 빌더는 큰 차이점이 있습니다.


String 은 한번 생성되면 불변입니다. 객체로서 생성되면 메모리 공간이 변하지 않습니다. 고정된 것이죠. 그렇기 때문에 문자열 처리 작업이 모두 새로 객체를 생성해서 하게 합니다. 그러니까 애초부터 그렇게 설계된 클래스인거죠.


반면에서 StringBuffer 나 StringBuilder 는 가변적입니다. String 과 다르게 동작합니다. 내부 공간이 버퍼이고 가변적으로 늘리면서 유연하게 동작합니다.


그래서 String 에 비해서 성능이 좋습니다.


하지만 StringBuffer 와 StringBuilder 는 큰 차이점이 있습니다. 동기화 문제이죠.

StringBuffer 는 각 메서드 별로 동기화 키워드가 붙어 있습니다.

반면에 StringBuilder 는 그렇지 않고요.


멀티 쓰레드 환경에서는 StringBuffer 를,

단일 쓰레드 환경에서는 StringBuilder 를 사용하는 것이 좋습니다.



메모리 공간

동기화 여부

String

 불변

비동기

StringBuffer

 가변

 동기

 StringBuilder

 가변

 비동기





'Software Engineering' 카테고리의 다른 글

Variable initialization  (0) 2017.10.19
Get display size  (0) 2016.12.23
파일 위치 검색 명령어 2  (0) 2016.04.15
리눅스 용량 확인  (0) 2015.11.09
자바 변수형  (0) 2014.09.26