전공공부/JAVA

[JAVA] 문자열 표현 (String, StringBuffer, StringBuilder)

프로호구래머 2020. 10. 19. 00:27

Java에서 문자열을 표현하는 방법에는 3가지가 존재한다.

String, StringBuffer, StringBuilder

각각의 특징과 차이점에 대해서 알아보자.

특징

String

String은 character의 배열이다.

String들은 상수이기 때문에 한 번 생성된 후에는 값을 바꿀 수 없다.(immutable)

그렇기 때문에 삽입, 삭제보다는 검색에 유리하다.

 

개별 character들을 검색하고, string들을 비교, 검색하고, substring들을 추출하고, 모든 character들을 대문자나 소문자로 변경한 복사본을 만들 수 있는 함수를 제공한다.

 

Java에서는 +로 문자열을 병합할 수 있는 연산자를 지원하고, 다른 객체들을 스트링으로 변환하는 것도 지원한다.

문자열 병합은 StringBuilder(혹은 StringBuffer)로 변환 후 그것의 append 함수로 구현 되어 있다고 한다.(속도면에서 이점이 있어서 그러는듯 하다.)

 

StringBuffer

String과 달리 한 번 생성된 후에도 값을 변경 할 수 있다.(mutable)

thread-safe 하기 때문에 다중 스레드에서 사용하기 안전하다.

 

주요 함수에는 append와 insert 함수가 있다.

 

StringBuilder(JDK 5부터 지원)

StringBuffer와 호환되는 API를 제공하지만 동기화를 보장하지는 않는다.

이 클래스는 단일 쓰레드에서도 사용되던 StringBuffer를 대체하기 위해 고안되었다.

단일 쓰레드에서는 동기화를 지원하는 StringBuffer보다 동기화를 지원하지 않는 StringBuilder가 더 빠르다.

 

차이점

String vs StringBuffer, StringBuilder

String은 immutable해서 한 번 값을 정하면 변경하지 못하는 반면,

StringBuffer와 StringBuilder는 mutable하게 값을 매번 변경할 수 있다.

그래서 String은 읽기에 유리하고, StringBuffer와 StringBuilder는 수정이 빈번한 것에 유리하다.

 

StringBuffer vs StringBuilder

위의 특징들을 미루어 보았을 때, StringBuffer와 StringBuilder는 제공하는 API도 동일하여 다른점이 없어보이지만,

StringBuffer는 동기화를 보장하기에 멀티쓰레드 방식에 유리하다.

그에 반해 StringBuilder는 동기화를 보장하지 않기에 싱글쓰레드 방식에서 사용해야한다.

싱글쓰레드 에서는 StringBuffer에 비해 StringBuilder가 더 빠르다.

'전공공부 > JAVA' 카테고리의 다른 글

Arrays.sort() 오름차순 내림차순  (0) 2020.10.12
[JAVA] Comparable과 Comparator의 차이점  (0) 2020.10.07
[JAVA] Math.pow() 를 이용한 거듭제곱  (0) 2020.10.07
[JAVA] ClassLoader 란?  (0) 2020.09.18
java string 비교  (0) 2020.08.28