반응형
자바에서 문자열을 처리할 때 대표적으로 String, Stringbuffer, StringBuilder 3가지를 사용한다.
위 3가지의 차이점은 무엇일까?
String
int, long, float, char, boolean과 같은 primitive 타입이 아닌 reference 타입의 참조형 변수로 한 번 할당된 공간이 변하지 않는 immutable 자료형이다.
String str = "Hello ";
str += "World !!!";
위의 그림을 보면 본래 가리키고 있던 "Hello" 를 버리고 "Hello World !!!" 라는 값을 가지는 메모리 영역을 가리킨다. immutable 자료형의 특징으로 문자열을 수정하게 되면 기존에 있던 메모리 영역은 Garbage Collection 으로 사라지고, 새로운 String 인스턴스를 생성한다.
StringBuffer / StringBuilder
String 과 다르게 가변성을 띄고 있다. append(), delete() 등의 API를 이용해서 동일 객체 내의 문자열을 변경할 수 있기 때문에 문자열의 추가, 수정, 삭제가 빈번한 경우에 훨씬 유리하다.
StringBuffer sb = new StringBuffer("Hello ");
sb.append("World !!!");
StringBuffer 와 StringBuilder 차이는 무엇일까?
두 개의 가장 큰 차이점은 동기화 보장 유무이다.
StringBuffer 은 동기화를 보장하기 때문에 멀티 쓰레드 환경에서 안전하다. 또한, String 은 불변성을 가지고 있기 때문에 멀티 쓰레드 환경에서 안전성을 가지고 있다.
StringBuilder 은 동기화를 보장하지 않기 때문에 멀티쓰레드 환경에서 부적합하지만 단일 쓰레드 환경에서의 성능은 훨씬 유리하다.
String | StringBuffer | StringBuilder | |
불변성 | O | X (가변성) | X (가변성) |
동기화 보장 | 유 | 유 | 무 |
유리한 환경 | 문자열 연산이 적고, 멀티 쓰레드 환경 | 문자열 연산이 많고, 멀티 쓰레드 환경 | 문자열 연산이 많고, 단일 쓰레드 환경 |
반응형
'개발 & 데이터베이스 > JAVA' 카테고리의 다른 글
자바 오류 source release 11 requires target release 11 해결 (0) | 2023.01.12 |
---|---|
[JAVA] 얕은 복사와 깊은 복사에 대해서 알아보기 (0) | 2022.12.26 |
자바 정적 (Static) 메서드 정의 및 생성, 사용 예시 (0) | 2022.11.08 |
자바 파일 복사하는 4가지 방법 (0) | 2022.10.14 |
자바 이클립스 설정: 탭(Tab)을 공백(space) 4개로 변경하기 (0) | 2022.10.11 |