String클래스는 내부적으로 private final char value[]
로 구현이 되어 있기 때문에 한 번 생성된 문자열은 수정할 수 없다.(immutable)
concat()
메서드를 사용하여 문자열을 이어붙인다고 해도 해당 문자열이 수정되는 것이 아니라 새로운 문자열이 생성되는 것이다. 그래서 새로운 메모리가 할당되므로 해당 String의 주소 값이 달라진다. 이처럼 String을 이어붙이거나 변경할 때마다 새로운 메모리에 할당이 된다면 메모리가 많이 낭비될 것이다. 따라서 이 문제를 해결하기 위해 StringBuilder
와 StringBuffer
클래스를 사용한다.
StringBuilder와 StringBuffer는 내부에 final이 아닌, 변경 가능한 char[]를 변수로 가지고 있다. 그래서 문자열을 변경하거나 연결해도 추가적인 메모리가 필요하지 않다.
둘 중 StringBuilder
사용법을 코드로 알아보자.
String strTest = "Java";
StringBuilder sb = new StringBuilder(strTest);
buffer.append(" and");
buffer.append(" web");
buffer.append(" programming is fun!");
strTest = buffer.toString();
System.out.println(strTest);
/*출력결과
Java and web programming is fun!
*/