str1 + str2는 "HelloWorld"가 되고 이 둘과는 연관없는 새로운 String 변수에 값이 저장된다. 즉, String 연산은 메모리의 낭비가 일어나기 쉽다(불변immutable 객체의 한계성)
StringBuilder: String의 단점 보완
StringBuilder를 사용하면 추가적인 인스턴스를 생성없이 문자열의 연산을 수행한다. 기존의 데이터를 참조하는 방식인데 이로 인해 문자의 삽입과 삭제가 자유롭다. 하지만 StringBuilder가 곧 String은 아니다. 연산 이후 String으로 변환해주어야 한다(toString()메소드)
StringBuilder sb = new StringBuilder();
StringBuilder의 인스턴스는 위와 같이 만들 수 있다
StringBuilder 사용하기
그러면 어떻게 사용할까? StringBuilder 내부의 메소드를 알아보자
StringBuilder의 메소드
.length();
문자열의 길이를 반환
sb.length();
.reverse();
문자열을 뒤집어준다
sb.reverse();
.append("");
문자 뒤에 문자열을 추가해준다
sb.append("!!!");
.delete(index1, index2)
index1부터 index2까지 문자열을 삭제한다
sb.delete(2, 5);
.insert( index, " ");
index에 문자열 값을 삽입한다
sb.insert(2, "inserted");
.replace(index1, index2, " ");
index1에서 index2를 문자열 값으로 대체
sb.replace(2, 4, "replaced");
.toString();
StringBuilder을 문자열로 변환
sb.toString();
예제: 응용 부분이 중요하다
StringBuilder sb = new StringBuilder();
sb.append("Hello"); //println 시: Hello
sb.append("World"); //println 시: HelloWorld
sb.delete(2, 5); //println 시: HeWorld
//응용: 메소드를 여러개 붙일 수 있다
sb.append("/n").append("new line");