🍃 Language/Java

[Java] 문자열클래스 string/ stringbuffer / stringbuilder

카프리썬_ 2020. 1. 13. 12:00
728x90
728x90

정리

srting,stringbuffer,stringbuilder의 공통점은 모두 string문자열을 관리하는 클래스

string클래스는

new연산을 통해 한번 생성하되면 메모리공간은 변하지 않은 불변객체입니다.

그래서 연산이 필요하면 메모리공간을 늘리는것이 아니라 계속해서 인스턴스를 생성하므로 성능이 떨어집니다.

대신 단순하게 읽는 조회연산에선 속도가 빠릅니다.

sringbuffer, stingbuilder 클래스는

string과 다르게 연산에 따라 메모리 크기를 변경할 수 있습니다.

멀티스레드 환경에서 동기화가 가능한지에 따라 stringbuffer와 stingbuilder로 구분할 수 있습니다.

stringbuffer는 멀티스레드 환경에서 동기화가 가능하지만 stringbuilder는 불가능합니다.

그래서 stringbuilder는 단일스레드환경에서 연산속도가 빠릅니다.

  String StringBuffer StringBuilder
  불변객체 가변객체 가변객체
메모리크기 변경 불가능 가능 가능
멀티스레드 환경 동기화   가능 불가능
장점 조회연산에서 빠름 단일스레드 연산속도 빠름  

string 불변객체

문자를 수정하려면 지우고 다시 생성해야함

new 연산을 통해 생성되면 메모리 공간은 절대 변하지 않는다.

문자열 연산이 많으면 메모리 공간이 변하는게 아니라 새로운 객체를 만들어서 공간을 추가하는것

단점) 문자열 연산이 많아지면 성능이 떨어진다.

계속 새로운 문자열이 만들어지게 되면 기존의 문자열은 가비지 콜렉터에 의해 제거되어야 한다.

그리고 문자열 연산이 많아지면 계속 해서 객체를 만드는 오버헤드가 발생해서 성능이 떨어짐

장점) 단순하게 읽어가는 조회연산에서는 빠르게 읽을 수 있다.

stringbuffer 가변

new연산으로 클래스를 한번 만들고, 필요할때 크기를 변경해서 문자를 변경

append()처럼 계속 크기가 바뀜

멀티스레드 환경에서 synchronized키워드가 가능해서 동기화가 가능함. thread-safe

stringBuilder 가변

동기화 지원x

멀티쓰레드환경에 부적합

장점) 싱글스레드일 경우 stringbuffer보다 성능이 좋음(연산 속도가 빠르다)'

동기화?

멀티쓰레드에서는 여러스레드가 프로세스의 자원을 공유해서 사용한다.

그래서 스레드 끼리 공유된 자원을 순서에 맞춰 사용하는것

 

 

 

 

728x90
반응형