Fall in IT.

StringBuffer와 StringBuilder의 차이점 본문

프로그래밍언어/Java

StringBuffer와 StringBuilder의 차이점

D.Y 2016. 3. 3. 13:23

오늘은 StringBuffer와 StringBuilder의 차이점에 대해 아주 간단한 내용만 알아보도록 하겠습니다.




String 클래스의 특징


  • 불변하는 클래스이다. 즉, 한번 생성되어지면 변할 수 없다. String 클래스의 메소드 subString(), concat() 등 모두 새로운 객체를 생성하여 만들어진다.


StringBuffer 클래스의 특징 

  • 변하는 클래스이다.
    append(), insrt(), delete() 등의 메소드를 통하여 StringBuffer 객체가 가지고 있는 문자열을 변경 할 수 있고, 새로운 객체를 생성하지 않고 기존의 문자열을 변경한다.
  • 동기화를 지원한다. 즉, 멀티스레딩 환경에서 동기화가 가능하다. (코드를 보면, 각 메소드 별로 synchronized 키워드가 존재한다.)

//객체를 한번만 생성한다.
StringBuffer result = new StringBuffer();

for(int i=0; i < n; i++) {

result.append(target);




StringBuilder 클래스의 특징

  • 변하는 클래스이다.
  • 동기화를 지원하지 않는다. 즉, 멀티스레딩 환경에서는 사용이 불가능 하다. (코드를 보면, 각 메소드에 synchronized 키워드가 존재하지 않는다.)
  • 속도가 가장 빠르다.



알아둘점


  • StringBuffer는 항상 String 클래스 보다 효율적이라고 생각하기쉽지만 동기화(synchronization)을 보장해야 하기 때문에 단순한 참조에서는 상대적으로 String 보다 나쁜 성능을 보일 수도 있다.
  • 동기화에 대한 보장이 필요하지 않을 경우에는 StringBuffer보다 StringBuilder를 사용해야 한다.
  • String 을 + 를 활용해 합치는 경우 매번 인스턴스를 생성하기 때문에 성능 상에 이슈가 많다.
    이런 성능 이슈를 개선하기위해
     JDK 1.5 버전 이후에는 컴파일 단계에서 StringBuilder로 컴파일 되도록 변경되기 때문에 + 를 활용해도 성능 상에 이슈는 없다.


Comments