본문 바로가기
프로그래밍/Java

[Java]String, StringBuilder, StringBuffer의 차이

by 시간많은백수 2023. 9. 30.
반응형

💡String 클래스

    • 불변(Immutable) 클래스: String 클래스는 한 번 생성되면 내용을 변경할 수 없는 불변 클래스입니다. 문자열을 수정하려면 항상 새로운 String 객체를 생성해야 합니다.
    • 스레드 안전(Thread-Safe): String 객체는 여러 스레드에서 동시에 사용해도 안전합니다. 따라서 멀티스레드 환경에서 문자열을 다룰 때 이점을 가집니다.
    • 성능 이슈: 문자열을 수정할 때마다 새로운 객체를 생성하기 때문에 문자열 연산이 반복되면 메모리 사용량이 증가하고 성능 저하가 발생할 수 있습니다.
    • 사용 사례: 문자열 수정이 거의 없거나 스레드 안전성이 요구되는 경우에 적합합니다.
1
2
3
String str = "Hello";
str = str + " World"; // 새로운 String 객체 생성
 
 
cs

 

💡StringBuilder 클래스

    • 가변(Mutable) 클래스: StringBuilder 클래스는 문자열을 가변적으로 수정할 수 있는 클래스입니다. 문자열 연산을 수행할 때마다 기존 객체를 변경하므로 새로운 객체를 생성하지 않습니다.
    • 스레드 안전하지 않음: StringBuilder 객체는 스레드 간에 공유되지 않도록 주의해야 합니다. 스레드 안전성을 고려하지 않는 대신 성능이 뛰어납니다.
    • 성능 향상: StringBuilder는 문자열 연산 시 매번 객체를 생성하지 않으므로 성능이 향상됩니다.
    • 사용 사례: 문자열을 동적으로 조작하고 성능이 중요한 경우에 적합합니다.
1
2
3
4
5
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World"); // 기존 StringBuilder 객체 변경
String result = sb.toString();
 
 
cs

 

💡StringBuffer 클래스

    • 가변(Mutable) 클래스: StringBuffer 클래스도 문자열을 가변적으로 수정할 수 있는 클래스입니다. StringBuilder와 유사한 기능을 제공하지만 스레드 안전한 버전입니다.
    • 스레드 안전(Thread-Safe): StringBuffer는 여러 스레드에서 안전하게 사용할 수 있도록 동기화되어 있습니다. 따라서 스레드 간에 안전하게 문자열을 조작할 수 있습니다.
    • 성능 저하: 스레드 안전성을 위해 동기화 작업을 수행하므로 StringBuilder에 비해 성능이 느릴 수 있습니다.
    • 사용 사례: 멀티스레드 환경에서 문자열 조작이 필요한 경우에 적합합니다.

1
2
3
4
5
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" World"); // 기존 StringBuffer 객체 변경
String result = sb.toString();
 
 
cs

 

💡어떤 것을 선택해야 할까?

  • 문자열 수정이 빈번하지 않고 스레드 안전성이 요구되는 경우: String
  • 문자열 수정이 빈번하고 스레드 안전성이 크게 고려되지 않는 경우: StringBuilder
  • 멀티스레드 환경에서 문자열 수정이 필요한 경우: StringBuffer
반응형