티스토리 뷰

728x90
반응형

목차

     

    자바에는 일반적으로 쓰이는 String 클래스 말고도 두 가지 클래스가 더 존재한다.

     

    똑같이 문자열을 저장 및 관리하는 클래스가 왜 세 가지나 있을까? 차이점을 간결하게 정리하자.

     

    String vs. String Buffer / Builder

     

    • String - 한 번 생성되면 할당된 메모리 주소가 변하지 않는다. '+' 혹은 concat() 메서드를 사용해 문자열을 추가하면
                    기존 메모리주소에 이어서 할당되는 것이 아닌 문자열이 추가된 새로운 문자열을 생성해 저장한다.
                    이때 힙 메모리엔 기존의 문자열이 Garbage로 남아 GC에 의해 회수되기 전까지 메모리를 차지하는데,
                    문자열의 수정이 자주 발생한다면 계속해서 Garbage가 쌓이게 된다.
                    이를 불변(immutable) 하다고 한다. 굳이 왜 이런 식으로 디자인했을까? 는 다른 글로 넘긴다.
    • String Buffer / Builder - String의 불변성으로 인한 불편함을 해소하기 위해 가변(mutable)성을 가지는 클래스이다.
                                               동일한 객체에서 메모리 주소를 유연하게 늘려가며 수정이 가능한 특성을 가지고 있다.

     

    String Buffer vs. String Builder

     

    먼저 둘의 공통점은 사용되는 메서드가 완전히 같다.

     

    아래와 같은 차이점을 인지하지 못한 채 사용하면 그냥 같은 클래스처럼 사용할 수도 있다.

     

    • String Buffer의 각 메서드엔 syncronized 키워드가 붙어있다. 즉 멀티 스레드 환경에서 동기화를 지원한다.
        @Override
        public synchronized int compareTo(StringBuffer another) {
            return super.compareTo(another);
        }
    
        @Override
        public synchronized int length() {
            return count;
        }
    
        @Override
        public synchronized int capacity() {
            return super.capacity();
        }
    
        @Override
        public synchronized void ensureCapacity(int minimumCapacity) {
            super.ensureCapacity(minimumCapacity);
        }
    
        @Override
        public synchronized void trimToSize() {
            super.trimToSize();
        }

    이를 한 마디로 스레드 세이프(thread-safe)하다고 하며, 현업에서는 언제 멀티 스레드 환경이 될지 모르기 때문에

     

    많이 사용된다고 한다.

     

    그럼 String은? 애초에 한 번 할당되면 불변이기 때문에 스레드 세이프 하다. 불변으로 디자인 된 이유 중 하나일 것이다.

     

    • String Builder는 동기화가 고려되지 않은,  싱글 스레드 환경을 상정한 클래스이다. 때문에 단일 스레드에서의 성능은 String Buffer에 비해 뛰어나다고 한다.
    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/09   »
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30
    글 보관함