기록용 블로그

[JAVA] String, StringBuffer, StringBuilder의 차이 본문

개발/JAVA

[JAVA] String, StringBuffer, StringBuilder의 차이

andjane 2023. 5. 1. 14:21

Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, StringBuilder가 있다.

각 클래스의 특징은 무엇이며, 어떤 상황에서 사용해야 할까?

 

1. String

⭐️ String의 특징

String과 StringBuilder/StringBuffer 클래스의 차이점은 String이 불변한다는 것이다(!)

String str = "jane";
str += " blog"; // jane blog

위 코드 동작 방식을 보면,

1) 기존 jane이라는 값이 할당되어있던 String은

2) 문자열이 수정되며 jane blog라는 값을 가진 새 메모리영역을 가리키게 되고 (String 객체가 새로 생성)

3) 처음 선언했던 jane의 메모리 영역은 Garbage가 되어 GC에 의해 사라지게 된다.

 

즉, String 클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 인스턴스가 생성된 것.

 

⭐️ 어떤 상황에 쓸까?

따라서, 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용하면 좋은 성능을 기대할 수 있다. 또한 Immutable한 객체는 간단하게 사용 가능하고, 동기화에 대해 신경쓰지 않아도 되기 때문에(Thread-safe) 내부 데이터를 자유롭게 공유할 수 있다.

그러나 문자열 추가, 수정, 삭제의 연산이 빈번하게 일어나는 알고리즘에 String을 사용하게 되면 Heap 메모리에 많은 임시 Garbage가 생성되어 힙메모리 부족으로 애플리케이션 성능에 영향을 미칠 수 있다.

 

 

2. StringBuffer / StringBuilder

⭐️StringBuffer / StringBuilder 공통점 

String과는 반대로 StringBuffer와 StringBuilder는 가변성을 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체 내에서 문자열을 변경하는 것이 가능하다. 

 

⭐️StringBuffer vs StringBuilder 차이점

두 클래스의 차이점은 동기화 유무이다. StringBuffer는 각 메서드 별로 Synchronized Keyword가 존재하여 멀티스레드 환경에서도 동기화를 지원한다. 반면 StringBuilder는 동기화를 보장하지 않는다.

 

⭐️ 어떤 상황에 쓸까?

문자열의 추가, 수정, 삭제 연산이 빈번하게 발생하는 경우라면 StringBuffer/StringBuilder를 사용해야 한다. 추가적으로 단일스레드 환경이라면 StringBuilder를, 멀티스레드 환경이라면 StringBuffer를 사용하는 것이 좋은 성능을 기대할 수 있다.

 

 

3. 최종 정리

  • String : 문자열 추가, 수정, 삭제 연산이 적은 경우
  • StringBuffer : 문자열 추가, 수정, 삭제 연산이 많고 멀티스레드 환경일 경우
  • StringBuilder : 문자열 추가, 수정, 삭제 연산이 많고 단일스레드이거나 동기화를 고려하지 않아도 되는 경우

 

 

 

출처 : https://12bme.tistory.com/42

 

[자바] String, StringBuilder, StringBuffer의 차이

* String, StringBuffer, StringBuilder 차이점과 장단점. Java를 사용하면 종종 접하게 되는 문자열 클래스들입니다. (기술면접시 만나게 되는 문제 중 하나.) String, StringBuffer, StringBuilder.. 모두 문자열을 저

12bme.tistory.com

https://ifuwanna.tistory.com/221

 

[Java] String, StringBuffer, StringBuilder 차이 및 장단점

Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없습니다.

ifuwanna.tistory.com

 

'개발 > JAVA' 카테고리의 다른 글

[Java] Stream 이란? 1. 생성하기  (0) 2023.04.29