
Java 개발자라면 한 번쯤은 이런 고민을 해봤을 것입니다
"멀티 스레드 환경이니깐 문자열 결합할 때 무조건
StringBuffer를 써야 할까?"
결론부터 말하면, Spring Boot 서버 환경에서도 지역 변수로 문자열을 처리할 때는 **StringBuilder**를 사용해도 전혀 문제가 없습니다
이러한 특징 때문에 "멀티 스레드는 무조건 StringBuffer"라고 생각 할 수 있습니다
하지만, 모든 멀티스레드 환경에서 StringBuffer를 사용할 필요는 없습니다
Spring Boot는 기본적으로 멀티 스레드 환경입니다
하지만 메서드 내 지역 변수는 스택 메모리에 할당되므로 각 스레드마다 별도로 생성되고 관리됩니다
따라서 지역 변수는 각 스레드별로 고유한 메모리 공간을 갖게 되어 동기화가 필요 없습니다
@Service
public class ExampleService {
public String concatStrings() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append("문자열").append(i).append(" ");
}
return sb.toString();
}
}
위 코드에서 StringBuilder는 메서드 내에서만 지역적으로 사용되며,
각 요청은 독립적인 스레드에서 처리됩니다
따라서 여러 스레드가 동시에 같은 StringBuilder 인스턴스에 접근하는 상황은 절대 발생하지 않습니다
만약 여기에 굳이 StringBuffer를 사용한다면, 불필요한 동기화로 인해 성능 손실만 발생할 뿐입니다
StringBuilder를 쓰는 것이 좋습니다StringBuffer 혹은 명시적 동기화를 사용해야합니다