본문 바로가기

개발/JAVA

[Java] String과 StringBuilder의 차이점

반응형

Java에서 문자열을 다룰 때 `String`과 `StringBuilder`는 자주 사용됩니다. 두 클래스는 모두 문자열을 처리하지만, 성능과 동작 방식에서 중요한 차이점이 존재합니다. 이 글에서는 `String`과 `StringBuilder`의 차이점에 대해 설명합니다.

1. String 클래스

String은 불변(immutable) 클래스입니다. 즉, 한 번 생성된 문자열은 수정할 수 없습니다. 문자열을 수정하려고 할 경우, 새로운 String 객체가 생성되고, 기존의 객체는 변경되지 않습니다. 이로 인해 성능상 불필요한 객체 생성이 발생할 수 있습니다.

String 예시

public class StringExample {
public static void main(String[] args) {
String str = "Hello";
str = str + " World"; // 문자열 연결 시 새로운 String 객체가 생성됩니다.
System.out.println(str);
}
}

2. StringBuilder 클래스

StringBuilder는 가변(mutable) 클래스입니다. 즉, 문자열을 수정하는 데 있어 새로운 객체를 생성하지 않고 기존 객체의 값을 변경합니다. 이로 인해 문자열을 여러 번 수정할 때 `String`보다 성능이 뛰어납니다. 주로 반복문에서 문자열을 추가하거나 변경할 때 유용합니다.

StringBuilder 예시

public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 기존 StringBuilder 객체의 값을 변경
System.out.println(sb.toString());
}
}

3. 성능 차이

`String`은 불변 객체이기 때문에 문자열을 수정할 때마다 새로운 객체가 생성되며, 이로 인해 메모리 사용량과 성능이 떨어질 수 있습니다. 반면, `StringBuilder`는 가변 객체로, 기존 객체를 수정하므로 성능상 유리합니다.

성능 비교 예시

반복문을 이용한 문자열 연결에서 `String`과 `StringBuilder`의 성능 차이를 비교해 보겠습니다. 아래는 두 방법을 비교하는 코드입니다.

public class PerformanceComparison {
public static void main(String[] args) {
// String을 사용한 문자열 연결
String str = "";
for (int i = 0; i < 1000; i++) {
str += "Hello"; // 매번 새로운 String 객체가 생성됩니다.
}
// StringBuilder를 사용한 문자열 연결
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("Hello"); // 기존 StringBuilder 객체의 값을 변경합니다.
}
System.out.println("String 연결 완료");
System.out.println("StringBuilder 연결 완료");
}
}

4. 주요 차이점 요약

특징 String StringBuilder
불변성 불변(immutable) 가변(mutable)
성능 여러 번 수정 시 성능 저하 여러 번 수정 시 성능 우수
메모리 사용 수정 시 새로운 객체 생성 기존 객체를 수정
주 사용 용도 불변 문자열을 다룰 때 여러 번 문자열을 수정할 때

5. 결론

Java에서 문자열을 다룰 때, 문자열을 수정하는 방식에 따라 `String`과 `StringBuilder`를 선택해야 합니다. 만약 문자열을 자주 수정해야 한다면 `StringBuilder`를 사용하는 것이 성능 면에서 유리합니다. 반면, 문자열이 변경되지 않거나 한 번만 수정되면 `String`을 사용하는 것이 더 간편합니다.

반응형