본문 바로가기
언어 & 라이브러리/자바

[자바] String, StringBuilder, StringBuffer 차이점 정리

by illlilillil 2022. 9. 23.

공통 특징은 String을 저장하는 클래스이다 그러나 여러 다른 특징들을 가지고 있다. 

 

String

String은 두 가지 생성 방식이 있다. JVM의 힙 영역에 저장되어 가비지 컬렉터의 관리를 받게 된다.

그러나 리터럴 방식으로 생성하면 String Pool 영역에 생성되어 절대 변하지 않는 값을 가지고 있다. 그렇기에 만약 for문으로 String에 "+" 를 붙이는 것을 10개 돌리면 10개의 String 객체가 새로 생기게 된다. 생성된 String은 String Pool에 지속적으로 생기게 된다. 이렇게 되면 가비지 컬렉터가 지속적으로 추적하여 메모리 해제를 해야하는 문제가 있다. 불변성을 갖고 있기에 Thread-Safe하다는 특징 있다.

String first = "first"; //리터럴
String second = new String("second"); //new

StringBuilder와 StringBuffer

StringBuilder와 StringBuffer는 객체에 변동이 있더라도 하나의 객체만 가지고 있어 메모리 사용을 줄여준다.

만약 String이 지속적으로 바뀌는 객체라면 StringBuilder, Buffer 쓰는 것을 권장한다.

차이점은 무엇인가요?

1. StringBuffer는 Thread-Safe하나 StringBuilder는 그렇지 않다.

2. StringBuilder는 안정성 보장이 안되나 성능이 약 2배 가량 좋다.

 

결론~

Thread-Safe하면서 메모리 낭비를 하지않는 StringBuffer가 가장 매력적인 선택지인것 같다!!

  String StringBuilder StringBuffer
응답속도 빠른 순 3 1 2
메모리 사용 적은 순 2 1 1

댓글