자바 콘솔 애플리케이션을 만들 때 결과값을 화면에 표시하려면 변수와 문자열 리터럴을 조합하여야 한다.
1
System.out.println(strike + "스트라이크, " + ball + "볼");
이렇게 조합하거나, 혹은 C에서 했던 것처럼
1
System.out.printf("%d스트라이크, %d볼\n", strike, ball); // 또는 String.format
이렇게 가능할 것이다.
하지만 이러한 코드는 가독성은 좋으나 성능에서 많은 손해를 보게 된다.
이유는 String
클래스의 구현 방식 때문인데, 기본적으로 문자열 리터럴은 String
클래스의 불변 (immutable) 객체로 구현되기 때문에 이러한 방식으로 조합을 하면 하나를 이어 붙일 때마다 새로운 String
객체를 만들게 되고 이전에 있던 String
객체는 쓰레기가 되어 가비지 컬렉터에 의해 처리되며 처리 시간과 메모리 관리 측면에서 손해를 보게 된다.
이를 막고 메모리를 효율적으로 사용하기 위해 StringBuilder
또는 StringBuffer
가 사용된다.
StringBuilder
와 StringBuffer
는 사용법과 기능이 완전히 같지만, 단일 스레드 환경에서는 StringBuilder
가 성능이 좋고 멀티 스레드 환경에서는 StringBuffer
만이 동기화를 지원하므로 용도에 따라 쓰면 된다.
1
2
3
4
5
StringBuilder sb = new StringBuilder();
sb.append(strike).append("스트라이크, ");
sb.append(ball).append("볼");
System.out.println(sb.toString());
Comments powered by Disqus.