lottie
Seungjun's blog
blog
String, StringBuilder, StringBuffer

String, StringBuilder, StringBuffer

자바에서 문자열을 다루는 대표적인 클래스들인 String, StringBuilder, StringBuffer에 대해 각각 어떻게 다른지 알아보도록 하겠습니다.

1. String

불변(Immutable): String 클래스는 한 번 생성되면 내부 데이터를 변경할 수 없습니다. 즉, 문자열을 수정하려면 새로운 String 객체를 생성해야 합니다.

스레드 안전(Thread-Safe): String은 여러 스레드에서 동시에 접근해도 안전합니다.

메모리 효율성: 불변성으로 인해 추가 메모리 할당이 필요합니다. 문자열 연산이 많은 경우 메모리 소비가 늘어날 수 있습니다.


2. StringBuilder

가변(Mutable): StringBuilder 클래스는 문자열을 수정할 수 있는 가변 클래스입니다. 따라서 동일한 StringBuilder 객체 내에서 문자열을 변경할 수 있습니다.

스레드 안전하지 않음(Non-thread-Safe): StringBuilder는 스레드 안전하지 않습니다. 즉, 멀티 스레드 환경에서 동시에 접근할 경우 동기화 문제가 발생할 수 있습니다.

메모리 효율성: StringBuilder는 불변 클래스인 String보다 메모리 효율적입니다. 추가적인 메모리 할당이 발생하지 않고 내부 버퍼 크기를 조정하여 문자열을 추가합니다.


3. StringBuffer

가변(Mutable): StringBuilder와 마찬가지로 StringBuffer도 문자열을 수정할 수 있는 가변 클래스입니다. StringBuilder와 유사하지만 동기화된 메소드로 구성되어 스레드 안전합니다.

스레드 안전(Thread-Safe): StringBuffer는 스레드 안전합니다. 따라서 멀티 스레드 환경에서 안전하게 사용할 수 있습니다.

메모리 효율성: StringBuilder와 마찬가지로 StringBuffer도 불변 클래스인 String보다 메모리 효율적입니다.


결론

일반적으로 문자열을 수정할 때는 StringBuilder를 사용하는 것이 좋습니다. 단일 스레드 환경에서는 StringBuilder를, 멀티 스레드 환경에서는 StringBuffer를 사용하는 것이 좋습니다. 만약 문자열을 변경하지 않는 경우에는 String 클래스를 사용하는 것이 더 안전하고 메모리 효율적입니다.