String, StringBuilder, StringBuffer 각각의 차이에 대해 설명해주세요.

     

     

    String, StringBuilder, StringBuffer은 자바에서의 문자열 처리에 가장 많이 사용되는 세 클래스입니다.

     

    불변성

    String 클래스 특징

    - 문자열 처리 및 관리하는 클래스

    - immutable(불변성)의 특징이 있어 문자열 연산 작업 시 비효율적

    한 번 생성된 객체의 메모리가 불변이기 때문에, 메모리가 모두 각각 할당

     

    String 클래스의 장. 단점

     

    장점

    - 간단하게 사용 가능

    - Thread-safe 

    - 단순 조회나 자주 사용하는 경우 빠르게 읽을 수 있다.

     

    단점

    - 연산 작업에 쓰기에는 효율이 떨어짐

     

     

    String a라는 변수에 값을 담기 위해 메모리를 할당하는 상황을 예로 설명해보겠습니다.

    String a = "Hello"; // hello 값이 담긴 메모리가 생성되고, a는 메모리 주소를 참조합니다.

    여기에 " World"라는 문자열을 더해주면, 기존의 생성된 메모리에 값이 추가되는 것이 아니라 

    "Hello World"라는 값을 가진 새로운 String 객체를 만들어지고,

    기존의 "Hello"가 담긴 메모리 공간은 GC에의해 비워지게 되는 것입니다.

     

     


     

    가변성

    StringBuilder, StringBuffer 공통점

     

    두 개의 클래스는 모두 mutable(가변성)을 가지고 있습니다.

    불변성 = 메모리가 고정 할당
    가변성 = 문자열이 추가/삭제될 때 버퍼의 크기를 늘리거나 줄이는 등 메모리를 유동적으로 사용

     

    StringBuilder, StringBuffer 차이점

    StirngBuilder와 StringBuffer의 차이점은 실행 환경입니다.

     

    StirngBuilder : NOT Thread-safe 스레드에 안전한지 여부 관계없음 - 싱글 스레드

    StringBuffer : Thread-safe. 스레드에 안전한 프로그램 개발할 때 혹은 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 - 멀티 스레드 

     

     

    정리하자면 다음과 같습니다.

     

     

    728x90

    댓글