본문 바로가기

개발/JAVA

[JAVA] #02. [SQL] StringBuffer, StringBuilder, String 의 차이점

 

■ StringBuffer과 StringBuilder, String의 특징과 차이점?

우선 Java에서 세 가지 클래스의 특징과 차이가 무엇인지 요약하자면, 세 가지 클래스는 모두 문자열을 처리하기 위한 클래스이다. 문자열을 더하는 연산을 할 때 성능의 차이가 발생하는데 String 클래스가 StringBuffer, StringBuilder 보다 느리고 메모리 관리 측면에서도 큰 차이를 보인다. 따라서 문자열의 더하기 연산을 이용할 때는 StringBuffer 혹은 StringBuilder 의 사용을 고려해봐야 합니다.

StringBuffer와 StringBuilder 는 기능이 동일하지만 한 가지 차이점이 존재한다. 바로 동기화 처리 문제다.
StringBuffer 는 동기화(synchronization)를 지원하여 멀티 스레드 환경에서 안전하게 동작하지만, StringBuilder 는 동기화를 지원하지 않는다. 따라서 단일 스레드 환경에서는 StringBuilder 를, 멀티 스레드 환경에서는 StringBuilder를 사용하는 것이 권장된다. 굳이 두 클래스의 성능을 비교하자면 단일 스레드 환경에서 StringBuilder 가 StringBuffer 보다 빠르게 동작한다.

(ex) HashTable/HashMap, Vector/ArrayList 

 

■ StringBuffer, StringBuilder 와 비교한 String 클래스의 장점

StringBuffer와 StringBuilder이 String 보다 성능이 그렇게 좋다면 StringBuffer와 StringBuilder만 사용하지, 왜 String를 사용할까? 당연히 String 만의 장점이 있고, Java에서 세 가지의 클래스를 따로 제공하는 이유가 있다.

String 클래스는 immutable 속성을 가짐으로써 안전하다. 값이 변경되지 않기 때문에 여러 스레드가 데이터를 공유하더라도 동기화를 신경쓸 필요가 없이 안정성이 유지되는 장점이 있다. 그리고 StringBuffer, StringBuilder 클래스에서도 String 클래스를 이용용. toString() 메소드의 경우 StringBuffer, StringBuilder의 toString()가 호출되면 해당 문자열에 대한 String 객체를 생성해서 반환합니다. 따라서 연산이 적게 사용되고, 문자열 값의 수정 없이 읽기가 많은 경우에는 String 클래스의 사용이 더 적절하다.

 

■ StringBuffer 초기화 여러가지 방법

buffer.delete(0, buffer.length());

setLength(0)