[JAVA] String, StringBuffer, StringBuilder

lazySunday·2023년 3월 29일
1

JAVA Programming

목록 보기
1/2

string

"string is immutable"

String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다. +연산자 또는 concat 메서드를 통해 기존에 생선된 문자열에 새로운 문자열을 붙이는 것이 아닌 new string object를 생성 후 새로운 String 객체에 연결된 문자열을 저장하고 해당 객체를 참조하도록 한다.

String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 좋은 성능을 내지만, 생성 및 추가 그리고 삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리에 많은 가비지(Garbage)가 생성되어 메모리 부족으로 성능을 약화시킬 수 있다.

-> Thread-safe하고 내부 데이터를 자유롭게 공유할 수 있지만, 문자열 연산이 많은 경우 사용하지 말자.

StringBuffer, StringBuilder

"StringBuffer, StringBuilder is mutable"


StringBuffer와 StringBuilder는 String과는 다르게 기존 버퍼를 늘리며 유연하게 동작한다.

두 객체의 차이점은 동기화 여부이다

StringBuffer

1) 멀티스레드 환경에서도 동기화를 지원함.
2) 개발 중인 환경이 스레드에 안전한지 모를 경우 사용함.

StringBuilder

1) 동기화를 보장하지 않음(멀티스레드 환경).
2) 단일스레드 환경에서 StringBuffer보다 나은 성능을 발휘함.

정리

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

참고

profile
Economics & IT

0개의 댓글