ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] String, StringBuffer, StringBuilder 차이점
    JAVA 2024. 3. 25. 14:04
    반응형

    1. String 

    String 객체는 한번 할당된 공간이 변하지 않는다고 해서 'immutable(불변)'자료형 이라고 불린다.

    또한 String 객체는 + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 객체에 문자열을

    붙이는게 아니라 기존 문자열을 삭제한 후 새 String 객체에 연결된 문자열을 저장하고 그

    객체를 참조하는 것이다.

     

    - String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성.

    한번 생성된 객체의 내부 내용을 변화시킬 수 없다. 기존 객체가 제거되면 Java 의 가지비

    컬렉션이 회수한다. 

     

    Immutable 한 객체는 간단하게 사용가능하고, 동기화에 대해 신경쓰지 않아도

    되기 때문에(Thread - safe), 내부 데이터를 자유롭게 공유 가능하지만 추가 / 삭제 연산이

    많으면 성능이 좋지 않다.

     

     

     

    2. StringBuffer / StringBuilder

    StringBuffer / StringBuilder 는 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우,

    기존의 버퍼 크기를 늘리며 유연하게 동작한다.  또한 StringBuffer / StringBuilder 는 제공하는

    메서드도 똑같고 사용하는 방법도 동일하다.

     

    1) StringBuffer / StringBuilder 차이점

    둘의 차이점은 딱 한가지로 멀티 쓰레드(Thread)에서 안전(safe)한지 아닌지의 차이 뿐이다.

     

    StringBuffer 클래스는 쓰레드에서 안전하다. (thread safe)

    StringBuilder 클래스는 쓰레드에서 안전하지 않다. (thread unsafe)

     

    두 클래스는 문법이나 배열구성도 모두 같지만, 동기화(Synchronization) 에서의 지원 유무가

    다르다. StringBuilder 는 동기화를 지원하지 않는 반면, StringBuffer 는 동기화를 지원하여

    멀티 스레드 환경에서도 안전하게 동작할 수 있다.  그 이유는 StringBuffer 는 메서드에서

    synchronized 키워드를 사용하기 때문이다.

    더 자세한 내용은 <참조>를 확인하면면 된다.

     

    2) StringBuffer / StringBuilder 성능 비교

    성능은 StringBuilder 클래스가 더 좋다. StringBuffer / StringBuilder 의 차이는 쓰레드 안정성에

    있다고 했는데 아무래도 쓰레드 안정성을 버린 StringBuilder 가 좀더 떨 따지고 연산 하니 당연히

    좀 더 빠를 수 밖에 없다. 

     

    3. 문자열 자료형 정리

    String 을 사용해야 할 때

    ● String 은 불변성

    ● 문자열 연산이 적고 변하지 않는 문자열을 자주 사용할 경우

    ● 멀티쓰레드 환경일 경우

     

    StringBuilder 를 사용해야 할 때

    ● StringBuilder 는 가변성

    ● 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우

    ● 동기화를 지원하지 않아, 단일 쓰레드이거나 동기화를 고려하지 않아도 되는 경우

    ● 속도면에선 StringBuffer 보다 뛰어남

     

    StringBuffer 를 사용해야 할 때

    ● StringBuffer 는 가변성

    ● 문자열의 추가, 수정, 삭제 등이 빈번히 발행하는 경우

    ● 동기화를 지원하여, 밀티 스레드 환경에서도 안전하게 동작

     

     

    4. 주요 메서드

    https://opidea.tistory.com/entry/Java-StringBuffer-StringBuilder-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%84%9C%EB%93%9C

     

    [Java] StringBuffer / StringBuilder 주요 메서드

    코드로 보는 StringBuffer / StringBuilder 주요 메서드

    opidea.tistory.com

     

     

Designed by Tistory.