|

자바 String, StringBuilder, StringBuffer 차이: 언제 성능과 안전성을 같이 봐야 할까

자바 String, StringBuilder, StringBuffer 차이: 언제 성능과 안전성을 같이 봐야 할까
문자열 처리에서는 불변성, 변경 비용, 동기화 필요성을 같이 봐야 한다

자바 String, StringBuilder, StringBuffer 차이는 입문자뿐 아니라 실무자도 자주 다시 찾는 주제입니다. 셋 다 문자열을 다루지만, 불변성, 변경 비용, 동기화 필요성이 다르기 때문입니다.

이번 글에서는 성능 수치 싸움보다 “언제 무엇을 먼저 고르면 좋을까”를 중심으로 정리하겠습니다.

Oracle 문서 기준으로 보면 StringBuilder는 단일 스레드에서 더 빠른 mutable sequence 쪽에 가깝고, StringBuffer는 synchronized 성격을 가진 mutable sequence 쪽에 가깝습니다. 이 글은 그 차이를 실무 선택 기준으로 풀어 씁니다.


String은 왜 기본값처럼 많이 쓰일까

String은 불변 객체입니다. 한 번 만들어진 뒤 내용이 바뀌지 않기 때문에 공유와 전달이 안전하고, API 설계에서도 다루기 편합니다. 그래서 대부분의 읽기 중심 문자열 값은 String으로 시작합니다.

즉 String의 장점은 느리지 않아서가 아니라, 의미가 단순하고 안전하다는 데 있습니다.


그럼 StringBuilder는 왜 필요할까

문자열을 계속 이어 붙이는 작업은 String만으로 처리하면 중간 객체가 많이 생길 수 있습니다. Oracle 문서도 StringBuilder를 mutable sequence로 설명하고, 단일 스레드 사용에서는 StringBuffer보다 빠른 편이라고 말합니다.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(", ");
sb.append("world");
String result = sb.toString();

루프 안에서 문자열을 계속 붙이거나, 조합 단계를 여러 번 거칠 때는 StringBuilder가 더 자연스럽습니다.


StringBuffer는 언제 등장할까

StringBuffer도 mutable sequence지만, 문서상 synchronized 성격을 갖습니다. 즉 동기화가 필요한 환경을 고려한 타입입니다.

다만 여기서 중요한 것은 “thread-safe니까 무조건 더 좋다”가 아니라, 정말 그 동기화가 필요한 상황인가를 보는 일입니다. 대부분의 단순 문자열 조합 코드에서는 StringBuilder가 더 먼저 떠오르는 경우가 많습니다.


실무에서 가장 자주 하는 구분

  1. 읽기 중심 문자열 값이면 String
  2. 한 스레드 안에서 반복 조합이면 StringBuilder
  3. 동기화가 실제 필요한 공유 mutable sequence라면 StringBuffer 검토

결국 이 구분은 타입 지식보다 사용 환경 지식에 가깝습니다.


자주 하는 오해

  • 문자열 연결은 무조건 StringBuilder로 바꿔야 한다
  • StringBuffer는 안전하니까 항상 더 낫다
  • String은 느린 타입이다

실제로는 코드 길이, 연결 횟수, 스레드 환경, 가독성을 함께 봐야 합니다. 짧은 문자열 연결 하나까지 모두 StringBuilder로 바꾸면 오히려 코드가 더 지저분해질 수도 있습니다.

기본 비교 축은 이미 발행한 기존 문자열 비교 글과도 연결되고, API 설계 감각은 equals/hashCode 글과도 결이 닿습니다.


마무리

자바 String, StringBuilder, StringBuffer 차이는 결국 문자열 자체보다 어떤 변경 패턴과 동기화 요구가 있는지를 보는 문제에 가깝습니다. String은 안전한 기본값이고, StringBuilder는 단일 스레드 조합에 강하고, StringBuffer는 동기화가 필요한 경우를 위한 선택지입니다.

즉 정답 타입을 외우기보다, 지금 이 문자열이 읽기용인지, 조합용인지, 공유되는 mutable state인지를 먼저 구분하는 편이 훨씬 실용적입니다.

함께보면 좋은 글