본문 바로가기

개발공부/Java(JPA)

[Java] String VS StringBuilder 차이점

String과 StringBuilder의 차이점은 주로 불변성(immutability), 성능, 그리고 **동기화(synchronization)**에 있습니다.


🔍 1. 불변성(immutability)

  • String: 불변(immutable) 객체 → 한 번 생성되면 내부 값 변경 불가
    • 문자열을 변경하면 새로운 객체가 생성되어 메모리에 저장
  • StringBuilder: 가변(mutable) 객체 → 내부 버퍼를 변경할 수 있음
    • 문자열을 변경해도 같은 객체를 유지
String str = "Hello";
str += " World"; // 새로운 String 객체 생성 (기존 "Hello"는 GC 대상)

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 같은 객체 내부에서 문자열 변경

💡포인트: 문자열을 자주 변경해야 한다면 StringBuilder가 성능 면에서 유리해요.


2. 성능(Performance)

  • String은 문자열 변경 시 매번 새로운 객체를 생성하므로 속도가 상대적으로 느림
  • StringBuilder는 내부 버퍼를 수정하므로 성능이 훨씬 빠름

성능 비교 예제

// String
long start = System.nanoTime();
String text = "";
for (int i = 0; i < 10000; i++) {
    text += i; // 문자열 변경 시마다 새 객체 생성
}
long end = System.nanoTime();
System.out.println("String 시간: " + (end - start) + "ns");

// StringBuilder
start = System.nanoTime();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append(i); // 동일 객체에서 수정
}
end = System.nanoTime();
System.out.println("StringBuilder 시간: " + (end - start) + "ns");

결과: StringBuilder가 훨씬 빠르게 동작


🔒 3. 스레드 안전성(Thread-Safety)

  • String: 불변이므로 스레드 안전
  • StringBuilder: 스레드 안전하지 않음 (동기화 X)
  • StringBuffer: StringBuilder와 동일하지만 스레드 안전 (동기화 처리)

💡포인트:

  • 단일 스레드 환경 → StringBuilder
  • 멀티 스레드 환경 → StringBuffer

🛠️ 4. 주요 메서드 차이

기능 String StringBuilder

문자열 추가 +, concat() append(), insert()
문자열 변경 변경 불가 replace(), setCharAt()
문자열 삭제 불가능 delete(), deleteCharAt()
역순 변경 불가능 reverse()

🎯 정리

특성 String StringBuilder

불변성 O (Immutable) X (Mutable)
성능 느림 빠름
스레드 안전성 O (Thread-safe) X (Thread-unsafe)
사용 시점 변경이 적은 경우 변경이 빈번할 경우

👉 결론:

  • 문자열이 거의 변경되지 않으면 String 사용
  • 문자열을 자주 수정해야 한다면 StringBuilder 사용
  • 멀티스레드 환경에서 문자열을 자주 수정해야 한다면 StringBuffer 사용

'개발공부 > Java(JPA)' 카테고리의 다른 글

[Java] Map 과 HashMap의 차이점!  (0) 2025.02.17
[JPA] JPA에서 동기(Synchronous) vs 비동기(Asynchronous)  (0) 2025.02.17
JPA 란?  (1) 2025.02.13
Entity  (0) 2025.02.13
Repository  (0) 2025.02.13