본문 바로가기

Java

[Java] String, StringBuffer, StringBuilder 차이점

728x90

String

String은 자바에서 가장 기본적인 문자열 클래스이며, 불변(immutable)의 특징을 가지고 있습니다.
불변이란 한 번 생성된 문자열 객체의 값이 변경되지 않음을 의미합니다.

String message = "hello";
message += " world";
System.out.println(message); // 출력: hello world

 

위 코드에서 문자열이 변한 것처럼 보이지만, 실제로는 새로운 문자열 객체가 생성된 것입니다.
즉, "hello"와 "hello world"라는 두 개의 객체가 메모리에 존재합니다.

  • 문자열 풀(String Pool):
    문자열 리터럴로 생성된 String 객체는 JVM의 문자열 풀에 저장됩니다. 동일한 리터럴이 재사용되지만,
    문자열 조작(예: +=)은 새로운 객체를 생성하므로 메모리 효율이 떨어질 수 있습니다.
  • 비효율성:
    String 객체는 불변이기 때문에 문자열을 자주 변경하는 작업에서 메모리 사용량이 증가하며 성능이 저하됩니다.

 

 

StringBuffer와 StringBuilder

StringBuffer와 StringBuilder는 가변(mutable) 문자열을 다루기 위해 사용됩니다.
문자열이 변경되면 동일한 메모리 공간에서 크기를 동적으로 조정하므로 메모리 누수를 방지합니다.

  • 공통점:
    • 동일한 API를 제공 (append, insert, delete, reverse 등).
    • 문자열이 자주 변하는 작업에 적합.
  • 차이점:
    • StringBuffer:
      • 동기화(Synchronized)를 지원하여 멀티스레드 환경에서 안전합니다.
      • 다만, 동기화로 인해 단일 스레드 환경에서는 성능이 떨어질 수 있습니다.
    • StringBuilder:
      • 동기화를 지원하지 않아 단일 스레드 환경에서 더 빠른 성능을 제공합니다.
      • 멀티스레드 환경에서는 데이터 불일치 문제가 발생할 수 있습니다.
728x90

'Java' 카테고리의 다른 글

[Java] 동등성 (equals(), hashCode())  (0) 2025.01.05
[Java] 인스턴스 내부 클래스  (0) 2024.12.05
[Java] for-each 루프  (0) 2024.12.04
[Java] 리스트 인터페이스 구현  (3) 2024.11.26
[Java] 1급 커넥션  (0) 2024.10.14