본문 바로가기
Java

String / StringBuilder / StringBuffer

by sgyeong 2025. 12. 18.

문자열을 다루는 클래스 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

 

 

 

 

 

 

참고

https://inpa.tistory.com/entry/JAVA-%E2%98%95-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90#thankYou

 

☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되

inpa.tistory.com