프로그래밍언어/Java
[Java 중급] StringBuilder - 가변 String
배세
2024. 8. 13. 13:51
불변인 String 클래스의 단점
불변인 String 클래스에도 단점이 있다.
두 문자를 더하는 경우를 생각해보자. 불변인 String 내부 값은 변경할 수 없다. 따라서 변경된 값을 기반으로 새로운 String 객체를 생성한다. 문자를 더 자주 변경하는 경우라면 계속 String 객체를 만들 것이다. 결과적으로 컴퓨터의 CPU, 메모리 자원을 더 많이 사용하게 된다. 그리고 문자열의 크기가 클수록, 문자열을 더 자주 변경할수록 시스템의 자원을 더 많이 소모한다.
StringBuilder
이 문제를 해결하는 방법은 단순하다. 불변이 아닌 가변 String이 존재하면 된다. 가변은 내부의 값을 바로 변경하면 되기 때문에 새로운 객체를 생성할 필요가 없다.
public class StringBuilderMain1_1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("h");
sb.append("e");
sb.append("l");
sb.append("l");
sb.append("o");
System.out.println("sb = " + sb);
sb.insert(5, "java");
System.out.println("sb = " + sb);
sb.delete(7,9);
System.out.println("sb = " + sb);
sb.reverse();
System.out.println("sb = " + sb);
//StringBuilder -> String
String str = sb.toString();
System.out.println("str = " + str);
}
}
=> 변경사항을 적용한 뒤에 String 객체에 할당하는 것도 가능하다.
실행결과
가변(Mutable) VS 불변(Immutable)
- String은 불변이다. 즉, 한 번 생성되면 그 내용을 변경할 수 없다. 따라서 문자열에 변화를 주려고 할 때마다 새로운 String 객체가 생성되고, 기존 객체는 버려진다. 이 과정에서 메모리와 처리 시간을 소모한다.
- StringBuilder는 가변이다. 하나의 StringBuilder 객체 안에서 문자열을 추가, 삭제, 수정할 수 있으며, 이 때마다 새로운 객체를 생성하지 않는다. 이로 인해 메모리 사용을 줄이고 성능을 향상시킬 수 있다.
=> StringBuilder는 보통 문자열을 변경하는 동안만 사용하다가 문자열 변경이 끝나면 안전한(불변) String으로 변환하는 것이 좋다.
* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.