[Java] StringBuffer와 StringBuilder의 차이

The Flawless Bead·2023년 2월 15일
0

JAVA

목록 보기
1/1

String, StringBuffer, StringBuilder 모두 문자열을 저장하고 관리하는 클래스이다. 이들의 차이점과 장단점을 알아보자.


1) String

먼저 String 과 다른 두 문자열 클래스의 아주 기본적인 차이점은 immutable(불변) / mutable(변함)에 있다.

String 객체는 한 번 생성되면 할당된 메모리 공간이 변하지 않는다. + 연산자 또는 concat 메소드를 통해 String 클래스 객체 문자열에 다른 문자열을 붙이면 기존 문자열에 새로운 문자열을 붙이는 것이 아니라, 새로운 String 객체를 만들어 연결된 문자열을 저장하고, 그 객체를 참조하는 방식이다. (처음 선언한 "Hello"의 메모리 영역은 Garge로 남아있다가 기존 객체가 제거되면 GC(Garbage Collection)에 의해 사라진다.)

이러한 이유로 문자열 연산이 많은 경우 성능이 좋지 않기 때문에 문자열의 추가, 수정, 삭제가 빈번하게 발생하는 경우라면 String 클래스가 아닌 StringBuffer, StringBuilder 클래스를 사용해야한다.



2) StringBuffer / StringBuilder

String 과 반대로 StringBuffer / StringBuilder 는 가변성을 가지기 때문에 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우, 기존 버퍼의 크기를 늘리며 유연하게 동작한다.
다시말해, append(), delete() 등의 API를 이용하여 동일 객체 내에서 문자열을 변경하는 것이 가능하다.

그렇다면 StringBuffer 와 StringBuilder 의 차이는 뭘까? 바로 동기화 여부이다. StringBuffer 는 각 메소드 별로 Synchronized Keyword 가 존재하여 멀티스레드 환경에서도 동기화를 지원하는 반면, StringBuilder 는 동기화를 보장하지 않는다.



정리

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




📚 참고
https://ifuwanna.tistory.com/221
https://12bme.tistory.com/42

profile
오늘을 살고 내일을 꿈꾸는 낭만주의자

0개의 댓글