본문 바로가기
Java

[Java] String, StringBuffer, StringBuilder 특징

by 가드 2022. 11. 7.
728x90

자바 문자열을 표현하는 객체에는 대표적으로 String, StringBuffer, StringBuilder가 있다.

 

StringBuffer, StringBuilder와 String의 중요한 차이점은 String은 불변(Immutable) 객체이며, StringBuffer와 StringBuilder는 가변(Muttable) 객체라는 점이다.

 

여기서 불변(Immutable)과

구분 자료형 타입
대표적인 Immutable 객체 String, Boolean, Float, Long
대표적인 Muttable 객체 List, ArrayList, HashMap, StringBuilder, StringBuffer

불변과 가변은 다시 다뤄보자. 다시 돌아와서.

 

String

String 객체는 한번 할당된 메모리가 변하지 않고 Heap Memory에 생성된 객체의 내용을 변화시킬 수 없다.

String s = "hello";
"hello"가 선언된 문자열 s가 메모리에 할당되고

s = s + "world";
"hello world"라는 새로운 문자열 s가 신규 메모리에 할당되고 기존 "hello"가 할당 된 메모리는 GC에 의해 제거되게 된다.

위와 같은 메모리 할당 방식이기 때문에 문자열 연산이 많은 경우 성능 이슈가 있을 수 있다.

 

StringBuffer, StringBuilder

StringBuffer와 StringBuilder는 String과 다르게 객체의 공간이 부족할 경우 버퍼 크기를 늘리면서 유연하게 동작하게 된다.

또한 StringBuffer와 StringBuilder가 지원하는 메소드는 모두 동일하며, 두 객체의 차이는 동기화가 되냐 안되냐의 차이이다.

StringBuffer는 Synchronized 키워가 있으며 멀티스레드 환경에서 동기화를 지원한다 (Thread Safe)

그와 다르게 StringBuilder는 동기화를 지원하지 않는다.

요약

- String :  멀티쓰레드 환경이면서 문자열 연산이 적은 경우에 적합하다.

- StringBuffer : 멀티스레드 환경이면서 문자열 연산이 빈번하게 발생하는 경우에 적합하다.

- StringBulider : 단일스레드 환경이면서 문자열 연산이 빈번하게 발생하는 경우에 적합하다.

 

300x250

'Java' 카테고리의 다른 글

[JAVA] RSA 비대칭키 양방향 암호화 구현  (0) 2022.12.02
[Java] 0.1 + 0.2 = 0.3이 아니다!  (0) 2022.11.11
[Java] 클래스로더(Class loader)  (0) 2022.11.10
[Java] JDK11 특징  (0) 2022.11.09
[Java] Reflection으로 객체 비교  (0) 2022.11.08

댓글