String 과의 차이
String으로 문자열을 생성하면 스트링 풀이라는 곳에 메모리가 잡히게 됩니다. 스트링 풀의 문자열은 변경할 수 없기 때문에, 이 문자열에 + 등 연산을 하게되면 스트링 풀에 매번 새로운 문자열이 생성됩니다. 이러한 메모리 비효율성 때문에 문자열에 여러번 연산을 해야 한다면 StringBuilder와 StringBuffer를 사용해야 합니다.
StringBuilder와 StringBuffer은 String 과 비교하였을 때, 가변성이라는 특징이 있습니다.
StringBuilder와 StringBuffer는 문자열을 다룰 때, Heap 영역에 버퍼를 만들어서 문자를 다룹니다. 그렇기 때문에 문자열에 연산을 해도 새로운 문자열이 스트링 풀에 새로 생기지 않습니다.
그렇다면 두 클래스의 차이는 무엇일까요?
StringBuilder와 StringBuffer는 동기화 부분에서 차이가 있습니다.
StringBuffer는 동기화 키워드를 제공하기 때문에 멀티스레드 환경에서 안전하고, 반대로 StringBuilder는 안전하지 않습니다. 하지만 StringBuilder는 동기화를 고려하지 않는 만큼 단일 스레드 상황에서는 StringBuffer보다 속도가 더 우월합니다.
** StringBuffer 클래스의 메소드들에는 synchrnized 키워드가 있습니다.
@Override
public synchronized int compareTo(StringBuffer another) {
return super.compareTo(another);
}
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return super.capacity();
}
따라서, 문자열 연산을 많이 한다면 StringBuilder와 StringBuffer를, 그 중에서도 멀티 스레드 환경에서 thread-safe하게 사용해야 한다면 StringBuffer를, 단일 스레드 환경에서 속도가 더 중요하다 싶으면 StringBuilder를 사용하면 됩니다.
'JAVA' 카테고리의 다른 글
자바 Object 클래스 탐구 (0) | 2021.08.05 |
---|