Java

[JAVA] 6. StringBuffer vs StringBuilder

히비스 2021. 4. 29. 19:41

String은 immutable(불변의)한 객체다.

String 문자열을 더하면 새로운 String 객체가 생성되고, 기존 객체는 버려진다.

그러므로, 계속 하나의 String을 만들어 계속 더하는 작업을 한다면,

계속 쓰레기를 만들게 된다.

 

ex1)

String text = "Hello";

text = text + " world";   //첫번째 text 객체는 쓰레기가 된다.

자바의 가비지 컬렉션이 계속 일을 하게끔 되므로 성능저하를 일으킨다.

 

이런 단점을 보완하기 위해서 나온 클래스가 StringBuffer와 StringBuilder다.

이 둘의 간단한 차이점은,

  StringBuffer Stringbuilder
Thread Safe win lose
Speed lose win

 

ex2)

StringBuilder sb = new StringBuilder();

sb.append("Hello");

sb.append(" world");

 

물론 JDK 5 이상에서는 String의 더하기 연산을 할 경우,

컴파일할 때 자동으로 StringBuilder로 변환해 준다.

그러나, for 루프와 같이 반복 연산에서는 자동으로 변환해주지 않는다.

 

사용법 : 

1. 일반적인 하나의 메소드 내에서 문자열을 생성하여 더할 땐, StringBuilder를 사용.

2. 어떤 클래스에 문자열을 생성하여 더하기 연산을 위한 인스턴스 변수가 있고

    여러 쓰레드에서 이 변수를 동시에 접근하는 일이 있을 땐, 반드시 StringBuffer를 사용.

 

 

 

 

 

 

 

*** 자바의 신(이상민 저)을 공부한 내용 중에 기억해야 할 개념들을 정리해 놓은 글 입니다.***