[Java] String / StringBuffer / StringBuilder
2021. 12. 30. 13:55ㆍLanguage`/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
>> 문자열 연산이 많고 멀티스레드 환경