<aside> 💡 정리

  1. String 불변 객체, 멀티스레드 연산 많으면 오버헤드
  2. StringBuffer 가변 객체, 멀티스레드 연산 적으면 오버헤드
  3. StringBuilder 가변 객체, 싱글스레드 제일 빠름 </aside>

Untitled

String

StringBuffer

스프링에서 지역 변수로 StringBuilder 사용

이유

  1. 스레드 안전성: 지역 변수는 메서드 호출 시마다 새로 생성되며, 해당 메서드가 실행되는 동안에만 존재합니다. 따라서 다른 스레드와 공유되지 않으므로 스레드 안전성 문제가 발생하지 않습니다.
  2. 성능: StringBuilder는 동기화 오버헤드가 없기 때문에 StringBuffer보다 성능이 우수합니다. 따라서 단일 스레드 환경에서 문자열을 조작할 때 더 효율적입니다
@Service
public class MyService {
    public String buildString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello, ");
        sb.append("World!");
        return sb.toString();
    }
}

위 예시에서 **StringBuilder**는 메서드 내에서만 사용되므로 스레드 안전성 문제가 없습니다.

스프링에서 멤버 변수로 StringBuilder 사용

이유

  1. 스레드 안전성 문제: 멤버 변수는 여러 스레드에서 동시에 접근할 수 있으므로, StringBuilder를 멤버 변수로 사용하면 스레드 안전성 문제가 발생할 수 있습니다. 이 경우 StringBuffer를 사용하는 것이 안전합니다