String의 덧셈 연산 대신 StringBuilder/StringBuffer를 사용해야 하는 이유
포스트
취소

String의 덧셈 연산 대신 StringBuilder/StringBuffer를 사용해야 하는 이유

자바 콘솔 애플리케이션을 만들 때 결과값을 화면에 표시하려면 변수와 문자열 리터럴을 조합하여야 한다.

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가 사용된다.

StringBuilderStringBuffer는 사용법과 기능이 완전히 같지만, 단일 스레드 환경에서는 StringBuilder가 성능이 좋고 멀티 스레드 환경에서는 StringBuffer만이 동기화를 지원하므로 용도에 따라 쓰면 된다.

1
2
3
4
5
StringBuilder sb = new StringBuilder();
sb.append(strike).append("스트라이크, ");
sb.append(ball).append("볼");

System.out.println(sb.toString());
This post is licensed under CC BY 4.0 by the author.

개발자 취업 도전기 - 2. 웍스모바일 면접

자바의 @Transactional 어노테이션

Comments powered by Disqus.