ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • String, StringBuffer, StringBuilder
    Java 2023. 8. 31. 22:29

    String, StringBuffer, StringBuilder

    문자열을 저장하고 관리하는 클래스

     

    String

    immutable(불변)

    한번 생성되면 할당된 메모리 공간이 변하지 않습니다. + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라 새로운 String 객체를 만든 후, 새 String 객체에 연결된 문자열을 저장하고, 그 객체를 참조하도록 합니다. (즉, String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성. 한번 생성된 객체의 내부 내용을 변화시킬 수 없습니다. 기존 객체가 제거되면 Java의 가비지 컬렉션이 회수합니다.)

    String 객체는 이러한 이유로 문자열 연산이 많은 경우, 그 성능이 좋지 않습니다. 하지만, Immutable한 객체는 간단하게 사용가능하고, 동기화에 대해 신경쓰지 않아도 되기때문에(Thread-safe),  내부 데이터를 자유롭게 공유 가능합니다.

    String str = "hello";
    str = str + " world";
    
    System.out.println(str); // hello world

     

    StringBuffer/StringBuilder

    공통점

    mutable(변함)

    문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 늘리며 유연하게 동작합니다.

    StringBuffer sb = new StringBuffer("hello");
    sb.append(" ");
    sb.append("world");
    
    System.out.println(sb); // hello world

     

    차이점

    StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하여, 멀티스레드 환경에서도 동기화를 지원.
    StringBuilder는 동기화를 보장하지 않음.

     

     

    정리

    String은 짧은 문자열을 더할 경우 사용합니다.

    StringBuffer는 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우

    StringBuilder는 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋음

    단순히 성능만 놓고 본다면 연산이 많은 경우, StringBuilder > StringBuffer >>> String 입니다.

     

     

    출처 :

    https://12bme.tistory.com/42

    https://inpa.tistory.com/entry/JAVA-%E2%98%95-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90

    'Java' 카테고리의 다른 글

    Optional 클래스  (0) 2023.09.08
    정규식 사용법  (0) 2023.08.18
    Iterator, Enumeration 인터페이스  (0) 2023.06.30
    Set  (0) 2023.06.27
    List  (0) 2023.06.27
Designed by Tistory.