StringBuilder

SungMin·2026년 5월 26일

자바 심화 정리

목록 보기
12/34

불변인 String 클래스의 단점

불변인 String 클래스도 단점이 있다.

String str = "A" + "B" + "C" + "D";
String str = String("A") + String("B") + String("C") + String("D");
String str = new String("AB") + String("C") + String("D");
String str = new String("ABC") + String("D");
String str = new String("ABCD");

불변인 String 클래스의 단점은 문자를 더하거나 변경할 경우 새로운 객체를 만들어야 한다는 것이다.
문자를 더 자주 변경해야할 경우 더 많은 String 객체를 만들어야 하고, GC해야 한다.
결과적으로 컴퓨터가 더 많은 메모리와 CPU의 문제가 생길 수 있다.


String Builder

이를 해결하기 위해서는 불변이 아닌 가변 String이 존재하면 된다.
가변은 내부의 값을 바로 변경할 수 있기 때문에 새로운 객체를 생성할 필요가 없다.
따라서, 메모리와 성능적으로 불변보다 효율적이다.

단, 가변을 사용할 경우 사이드 이펙트에 주의해야한다.

package test;

public class Builder {
    static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("A");
        sb.append("B");
        sb.append("C");
        sb.append("D");
        sb.append("E");
        System.out.println("sb = " + sb);

        sb.insert(4, "java");
        System.out.println("sb = " + sb);

        sb.delete(4, 8);
        System.out.println("sb = " + sb);

        sb.reverse();
        System.out.println("sb = " + sb);

        String string = sb.toString();
        System.out.println("string = " + string);
    }
}
  • String Buider로 가변 객체를 생성한다.
  • 메서드를 이용하며 문자열을 변환한다.
  • toString 메서드를 활용하여 가변 객체를 불변 객체로 변경한다.

가변 vs 불변

String은 불변이다.
따라서 문자열에 변화를 줄 때마다 새로운 String 객체가 생성되고 기존 객체는 버려진다.
반면 StringBuilder는 가변적이다.
하나의 StringBuilder로 추가, 삭제, 변경 할 수 있으며 그때마다 새로운 객체를 생성하지 않는다.
이로인해 메모리를 줄이고 성능향상에 이바지 할 수 있다.
단, 사이드 이펙트를 주의해야한다.


[정리]

  • String은 불변 객체다.
  • 문자열을 변경할 때마다 새로운 객체가 생성된다.
  • 문자열 변경이 많으면 메모리와 성능에 부담이 생길 수 있다.
  • StringBuilder는 가변 객체다.
  • 하나의 객체를 수정하면서 사용하기 때문에 성능상 효율적이다.
  • 최종 결과가 필요하면 toString()으로 String으로 변환한다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글