본문 바로가기

JAVA

StringBuilder vs StringBuffer

728x90

Java의 String은 Immutable하므로, 문자열을 변경할경우 계속해서 새롭게 객체를 할당해야하므로

메모리 효율성부문에서 좋지 않다.(Garbage 객체가 계속해서 생길것이다.)

이를 보완한 것이 StringBuilder와 StringBuffer이다.

 

이에 대해서 알아보자

 

1. Mutable(가변성)

String과 다르게 StringBuilder, StringBuilder 모두 mutable하다. 즉 가변성이 있다.

append, delete, insert 등을 이용하여 문자열을 바꾸더라도 객체를 따로 생성하지 않고 기존 객체를 이용한다.

그러므로, 문자열 추가, 수정,삭제를 빈번하게 사용해야 할 경우 String이 아닌 StringBuilder, StringBuffer를 사용해야한다.

 

2. StringBuilder vs StringBuffer

 

StringBuilder 와 StringBuffer의 차이는 동기화다.

StringBuffer의 api를 보면 synchronized라는 키워드가 붙어있는걸 볼 수 있다.

synchronized 키워드가 붙어잇는 함수는 한 시점에 오직 한쓰레드만 블록 안으로 접근할수 있도록 하는 락을 건다.

그러므로, 멀티쓰레드 환경에 안전하다는 장점(Thread-safe)이 있으나, 효율은 떨어진다는 단점이 있다.

(비슷한 예로 Java의 vector와 ArrayList가 있다. vector thread-safe: O , ArrayList :X)

 

반면 StringBuilder는 synchronized 키워드가 안 붙어있으므로 thread-safe 하지는 않지만 효율은 더 좋다.

 

그러므로 단일쓰레드일경우 StringBuilder를 쓰면 더 유리하고, 멀티쓰레드 환경일경우에는 동기화를 고려하여 StringBuffer를 쓰는게 더 유리하다.

 

이를 표로 정리해보면 다음과 같다.

출처 : https://tuandevnotes.com/

 

'JAVA' 카테고리의 다른 글

JAVA 8 - 람다 추가  (0) 2020.08.15
JAVA 8 (2) - Optional  (0) 2020.08.15
웹서버 vs WAS  (0) 2020.08.07
Java String  (0) 2020.07.02
JAVA 클래스의 == , equals 에 대해 알아보자  (0) 2020.06.03