ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ JAVA ] String , StringBuffer , StringBuilder 차이
    OOP & JAVA 2021. 9. 22. 17:56

    개발중 재귀적으로 String 을 클래스를 사용하던중 오류와 마주했고

    StringBuilder를 통해 해결했습니다. 여기에 StringBuffer 또한 추가해서 정리해보겠습니다.

     

    1. String 과 StringBuffer/StringBuiler 간의 차이

     String 과 나머지 두 클래스를 구분짓는 가장 큰 차이는 String 이 immutable(불변) 클래스 라는 것입니다.

    그리고 StringBuffer/StringBuiler  는 mutable 객체를 생성합니다.

     

     앞의 immutable 과 mutable 은 많은 분들이 파이썬의 리스트와 튜플과 같은 자료구조를 공부하면서 접해보셨을 수 있습니다. 쉽게 말해서 해당 자료형을 사용하는 객체가 수정되었을때 mutable 객체는 값이 수정되고 immutable 값이 수정되는 것이 아닌 새롭게 변수를 메모리 구조에 할당하는 방식으로 처리하게됩니다. 이렇게 되면 기존의 객체는 변수없이 메모리에만 올라가있는 garbage로 판단되어 추후 garbage collecting 되어 없어지게됩니다.

     

     위와 같은 이유로 문자열연산(문자열 자르기 합치기 등등) 이 많은 경우String을 사용했을때 성능이 좋지 않습니다.

     

    2. StringBuilder 와 StringBuffer 의 mutabel 동작원리

    string과 다르게 빌더와 버퍼는 어떻게 mutable 할 수 있을까요??

     

    그 이유는 두 객체가 AbstractStringBuiler라는 추상 클래스를 상속 받고 있고 내부적으로 가변 크기 배열을 이용하기때문입니다.  문자열의 추가 삭제시 기존의 배열 크기가 충분하다면 그대로 수정을하고 그렇지 않다면 기존에 크기 배열의 두배 크기로 생성하여 값을 저장하게 됩니다.

     

    3. StringBuffer와 StringBuilder

    공통적으로  StringBuffer 와 StringBuilder 의 경우 muttable 객체로서 문자열 연산으로 인해 객체 공간이 부족하면

    기존의 버퍼를 늘리며 유연히 동작합니다.

     

    반면 둘의 가장 큰 차이는 동기화 여부입니다.

    StrigBuffer 는 메서드 별로 Synchronized Keyword가 존재하여, 멀티스레드 환경에서도 동기화를 지원합니다.
    반면 StringBuilder는 동기화를 서비스를 제공하지 않습니다. 그러나 퍼포먼스 면에서는 StringBuilder가 StringBuffer보다 뛰어납니다.

    • String 은 짧은 문자열을 많은 수정없이 이용할때 사용
    • StringBuffer 는 멀티쓰레드 환경에서 개발중에 사용
    • StringBuiler는 문자열 연산이 많고 단일 쓰레드 혹은 동기화가 필요하지 않은 환경에서 사용

     

    댓글

Designed by Tistory.