습관적으로 StringBuilder.toString()
을 입력하다가 왜 toString()을 해야하지? 라는 의문점이 생겨서 찾아보게 되었다.
String
, StringBuffer
와 함께 많이 사용되며, 연산이 많지 않을 때는 성능 이슈가 발생하지 않지만 성능 고려를 위하면 각 클래스 별 특징을 잘 알아야한다. StringBuilder sb = new StringBuilder(); // 내부 문자열 버퍼 생성
sb.append("Hello");
sb.append(" ");
sb.append("world!");
System.out.println(sb.toString()); // 이걸 왜 습관적으로 썼을까?
System.out.println(sb); // 사실 이렇게 써도 된다.
StringBuilder
클래스 내부에서 문자열을 어떻게 다루고 있는지 확인해보자.
상속 받고 있는 AbstractStringBuilder
에서 byte[] 형으로 문자열 관리하는 것을 확인 할 수 있음
내부 문자열을 사용해서 저장하기 때문에 단순 StringBuilder
출력 시에는 toString()
메소드를 메소드가 자동으로 호출되어 문자열로 변환되어 출력 됨.
System.out.println(sb.toString());
System.out.println(sb);
사실 이 두가지는 동일한 결과값을 가진다.
toString()
메소드가 호출되면 새로운 문자열 객체를 생성된다.
동일한 문자열에 대해서는 해당 메소드를 호출해서 사용하기 보다는 재사용을 하자.