-> 블로그 이전

[Java] String / StringBuffer / StringBuilder

2021. 12. 30. 13:55Language`/Java

String

한번 값이 할당되면 할당된 값은 절대로 변하지 않는다 (Immutable) 

  • String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다 
  • + 연산자 / concat 메소드를 통해서 기존 String 객체 문자열에 다른 문자열을 붙이면 새로운 String 객체를 생성하고, 새로운 String 객체에 연결된 문자열을 저장한다

장점 

  • 동기화를 신경쓰지 않고, 내부 데이터를 자유롭게 공유한다

단점 

  • 문자열 연산이 많을 경우 힙 메모리(Heap)에 많은 임시 가비지가 생성되어서 힙메모리가 부족해져서 Application 성능에 치명적이다

 

 

 

 

StringBuffer / StringBuilder

- String과는 반대로, Mutable 특성을 가진다

- 동일한 객체 내에서 문자열을 변경할 수 있다

- 문자열 연산 등으로 객체의 공간이 부족하게 되면, 자동적으로 기존의 버퍼 크기를 늘린다

 

StringBuffer 

  • 각 메소드별로 Synchronized Keyword가 존재한다 / 멀티스레드 환경에서도 동기화 지원

StringBuilder 

  • 동기화를 보장하지 않는다

 

 

String / StringBuffer / StringBuilder

  String StringBuffer StringBuilder
저장 String pool Heap Heap
수정 가능 여부 X (Immutable) O (Mutable) O (Mutable)
Thread Safe O O X
동기화 O O X
수행 속도 빠르다 느리다 빠르다
성능 (단순 성능 / 연산 ↑) Third Second First

String 

>> 문자열 연산이 적고, 멀티스레드 환경

 

StringBuffer 

>> 문자열 연산이 많고 멀티스레드 환경

 

StringBuilder 

>> 문자열 연산이 많고, 단일스레드 or 동기화 고려 X