JAVA 문자열 클래스 - String / StringBuffer / StringBuilder

Lily·2023년 12월 23일
1

String

String 자료형은 불변(immutable) 클래스이므로, 한번 생성된 문자열은 변경할 수 없다.

String str = "Hello";
str = str + " World";

위 예시에서 String 자료형에 + 연산이 일어날 때 새로운 String 객체를 생성하는 것이기 때문에 총 2개의 String 객체가 만들어진 것이다.

=> 따라서 문자열 연결이나 수정이 필요할 때마다 새로운 문자열을 생성하기 때문에 성능이 떨어질 수 있다.

StringBuffer

StringBuffer 자료형은 가변(mutable) 클래스이므로, 내부의 문자열을 변경할 수 있다.

StringBuffer buffer = new StringBuffer("Hello");
buffer.append(" World");

아래에서 설명할 StringBuilder 와 비슷하고 사용법도 같은데 차이점이 있다.

  1. StringBuffer 는 내부적으로 동기화 메커니즘이 적용되어 있으므로 멀티스레드 환경에서 안전하다.
  2. 일반적으로 StringBuilder 보다 성능이 떨어진다
    ▶️ 따라서 단일 스레드 환경이거나 스레드 동기화가 필요하지 않은 경우에는 StringBuilder 를 사용하여 성능을 최적화할 수 있다.

그렇다면 멀티스레드 환경에서 무조건 StringBuffer 를 사용하는 것이 좋을까 ?

  • StringBuffer 는 String 에 비해 메모리 사용량도 많고 속도도 느리기 때문에, 문자열을 추가하거나 변경하는 작업이 많은 경우에 사용하는 것이 좋다.
  • 반면 문자열이 자주 변경되지 않고, 불변성이 필요한 경우에는 String 을 사용하는 것이 좋다.

StringBuilder

StringBuilder 자료형 또한 가변(mutable) 클래스이고, 내부의 문자열을 변경할 수 있다.

StringBuilder builder = new StringBuilder("Hello");
builder.append(" World");
  1. StringBuilder 는 동기화 기능이 없어 멀티스레드 환경에서 안전하지 않다.
  2. 동기화 기능이 없기 때문에 단일 스레드 환경에서 사용할 때 더 빠르다.

=> 따라서 대부분의 상황에서는 StringBuilder 를 사용하고, 멀티스레드 환경에서의 안전성이 중요한 경우에만 StringBuffer 를 고려하면 된다.

profile
내가 하고 싶은 거

0개의 댓글

관련 채용 정보