본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

String의 단점 그리고 StringBuffer와 StringBuilder


String 클래스는 메모리를 과소비합니다.

String String1 = "ABC";

System.out.println(String1);

String1 += "DEF";

System.out.println(String1);


위 소스를 실행하면 결과값

ABC

ABCDEF가 나옵니다.



참고자료 : 블스님의 자바 강좌 PPT 참조


String을 사용하여 DEF를 더하게 되면 기존에 선언된 ABC에 DEF를 더하는 것이 아니라 새로운 메모리에 ABCDEF가 생겨나고 기존에 ABC는 GC(가비지컬렉션)에 의해 삭제가 됩니다.

따라서 String를 이용하여 지속적으로 문자열을 바꾸는 것은  많은 메모리를 소모하게 됩니다. 이런 문제를 해결하기 위해 

StringBuffer와 StringBuilder 등장하게 되었습니다.


StringBuffer/StringBuilder의 차이

StringBuffer/StringBuffer는 String 과 다르게 동작합니다. 문자열 연산 등으로 기존 객체에 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 늘리며 유연하게 동작합니다. StringBuffer와 StringBuilder 클래스가 제공하는 메서드는 서로 동일합니다.

그렇다면 두 클래스의 차이는 무엇일까요.? 바로 동기화를 지원하느냐 안하느냐의 차이입니다.


StringBuffer 클래스 
: 스레드에 안전하게 설계 (ThreadSafe)
여러개의 스레드에서 하나의  StringBuffer 객체를 처리해도 전혀 문제가 되지 않는다.

StringBuilder 클래스 
: 단일 스레드에서의 안전성망을 보장
여러개의 스레드에서 하나의 StringBuilder 객체를 처리하면 문제가 발생한다.


단순하게 속도와 성능 측면에서 고려하자면

StringBuilder > StringBuffer >>> String 입니다.

하지만 각각의 클래스들은 성능 외에도 사용 편의성, 멀티스레드 환경 등 여러가지 고려해야할 요인이 있으므로 이에 적합한 것을 사용하면 되겠습니다.