자바 String, StringBuffer, StringBuilder 비교
자바 String, StringBuffer, StringBuilder 비교
- String vs StringBuffer/StringBuilder
- StringBuffer vs StringBuilder
String vs StringBuffer/StringBuilders
String과 StringBuffer/StringBuilder 클래스의 가장 큰 차이점은 String은 불변(immutable) 속성
String str = "hello"; // String str = new String("hello");
str = str + " world"; // [ hello world ]
기존 “hello” 값의 String 클래스 참조변수 str이 “hello world”라는 값을 가지는 새로운 메모리 주소를 가리키게 되고 처음 선언했던 “hello” 값이 할당되어 있던 메모리 영역은 Garbage로 남아있다가 GC(garbage collection)에 의해 사라짐
String 클래스는 불변 → 문자열을 수정하는 시점에 새로운 String 인스턴스가 생성
위와 같이 String은 불변성(immutable)
을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용시 고성능
그러나 문자열 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성 → 어플리케이션 성능 저하
이를 해결하기 위해 Java에서 가변성(mutable)
을 가지는 StringBuffer/StringBuilder
클래스 도입
String과는 반대로 StringBuffer/StringBuilder는 가변성을 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능
따라서 문자열의 추가, 수정, 삭제가 빈번하게 발생할 경우, String 클래스가 아닌 StringBuffer/StringBuilder를 사용
StringBuffer sb= new StringBuffer("hello");
sb.append(" world");
StringBuffer vs StringBuilder
StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전(thread-safe)
참고로, String도 불변성을 가지기 때문에 멀티쓰레드 환경에서 안정(thread-safe)
반대로 StringBuilder는 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에서 사용하는 것은 비적합하며, 동기화를 고려하지 않는 단일쓰레드 성능은 StringBuffer보다 유리
댓글남기기