문자열을 다루는 클래스 String / StringBuilder / StringBuffer
String
변경 가능성 : 불변
특징 : 문자열을 수정하거나 더할 때 기존 객체가 변하는 것이 아니라 새로운 String 객체가 메모리에 생성된다.
장점 : 변하지 않기 때문에 멀티쓰레드 환경에서 안전하며, 캐싱을 통해 메모리를 효율적으로 사용할 수 있다.
단점 : 문자열 연산이 빈번하게 일어나는 경우 계속해서 새로운 객체가 만들어지므로 성능저하와 메모리 낭비가 발생한다.
StringBuffer
변경 가능성 : 가변
특징 : 객체 내부의 값을 직접 수정할 수 있다. 문자열을 추가하거나 삭제할 때 새로운 객체를 만들지 않는다.
동기화 지원 : 메서드별로 동기화 처리가 되어있어 멀티쓰레드 환경에서 안전하다.
용도 : 여러 쓰레드가 동시에 같은 문자열 객체에 접근해야 할때 사용한다.
공간의 낭비가 없고, 문자열 연산 속도도 빠르다
StringBuilder
변경 가능성 : 가변
특징 : 객체 내부의 값을 직접 수정할 수 있다. 문자열을 추가하거나 삭제할 때 새로운 객체를 만들지 않는다.
동기화 미지원 : 동기화를 고려하지 않기 때문에 StringBuffer보다 속도가 빠르다.
용도 : 단일 쓰레드 환경이나 멀티쓰레드 환경이더라도 특정 지역 변수 내에서만 문자열을 다룰 때 권장된다.
| 구분 | String | StringBuffer | StringBuilder |
| 가변성 | 불변 | 가변 | 가변 |
| 동기화 | 해당 없음 | 지원 | 미지원 |
| 사용 시점 | 문자열 연산이 적을때 | 멀티쓰레드 환경 | 단일쓰레드 / 성능 중시 |
메모리 할당 방식의 차이
String은 Heap 영역 내의 String Constant Pool이라는 공간을 활용해서 동일한 문자열의 중복 생성을 방지하지만,
StringBuffer / StringBuilder는 일반적인 Heap 영역에 생성된다.
많은 양의 문자열 데이터 연산시 String 데이터를 + 연산하면 성능과 메모리 효율이 떨어지게 되어 좋지 않다. 그렇기 때문에 StringBuffer나 StringBuilder의 append() 메소드를 통해 문자열 데이터를 추가하는 것이 좋다고 한다.
변하지 않는 문자열을 주로 쓴다면 > String
문자열 수정이 빈번하고 멀티 쓰레드 환경이라면 > StringBuffer
문자열 수정이 빈번하고 성능이 중요하다면 > StringBuilder
참고
☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교
자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되
inpa.tistory.com
'Java' 카테고리의 다른 글
| Collections (클래스) / Collection (인터페이스) (0) | 2025.12.23 |
|---|---|
| 객체지향 프로그래밍 (OOP) (0) | 2025.12.17 |
| [Java] URLConnection / HttpURLConnection (0) | 2025.09.10 |
| [Java] 인터페이스 (Interface) (0) | 2025.09.10 |
| [Java] JVM (Java Virtual Machine) (0) | 2025.09.09 |