ToBe끝판왕

[ JAVA ] 문자열클래스 / String / StringBuffer / StringBuilder 본문

■ 공부 기록/개념 정리

[ JAVA ] 문자열클래스 / String / StringBuffer / StringBuilder

업그레이드중 2022. 5. 24. 21:41
반응형

자바( JAVA ) 에서 문자열을 다루는 대표적인 클래스

연산이 많지 않을때는 어떤 클래스를 사용하더라도 문제 없지만
연산횟수가 많아지거나 복잡한 상황에서 특징에  알맞게 적절한 클래스를 사용해보자

 


 

String 클래스

 

•  불변성을 갖는다. ( 변하지 않는 문자열을 자주 사용하는 경우에 좋은 성능 )

•  한번 생성되면 할당된 메모리 공간이 변하지 않는다.

•  concat 메서드 혹은 +연산자를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도

   기존 문자열에 새로운 문자열을 붙이는것이 아니라, 새로운 String객체를 만든 후 새로운 String

   객체에 연결된 문자열을 저장하고 그 객체를 참조하도록 한다.

String Str = " Hello ";			// String Str = new String( "Hello" );
Str = Str + " World ";			// [ Hello World ]

 

•  String 클래스 객체는 Heap 메모리영역( 가비지 컬렉션 동작 영역 ) 에서 생성하고 한번 생성된 객체의

   내부 내용을 변화시킬 수 없다.

•  문자열 연산( 문자열 추가 , 수정 , 삭제 등 ) 이 많은 경우 Heap메모리에 많은 임시 가비지가 생성되어

    Heap 메모리 부족으로 성능이 좋지 않다.

 

 

 

StringBuffer 클래스 / StringBuilder 클래스

 

•  가변성을 가지고 있다.

•  API를 이용하여 동일 객체내에서 문자열을 변경하는 연산이 가능하다.

•  문자열 연산( 문자열 추가, 수정, 삭제 ) 이 많은 경우에는 StringBuffer /  StringBuilder 클래스를 사용해야 한다.

•  StringBuffer / StringBuilder 클래스가 제공하는 메서드는 동일하다.

StringBuffer sb = new StringBuffer( "Hello" );
sb.append( "World" );

 

 

 

 

•  차이점

 

"동기화의 유무" 에서 차이점을 보인다.

StringBuffer는 각 메서드별로 Synchoronized Keyword가 존재, 멀티스레드 환경에서 동기화를 지원한다.

하지만, StringBuilder는 동기화를 보장하지 않는다.

( 멀티스레드 환경에서는 StringBuffer를 사용 , 단일스레드 환경에서는 StringBuilder를 사용 )

 

 

 

최종 정리

 

•  String 클래스

-  문자열 연산이 적고 멀티쓰레드 환경일 경우

-  짧은 문자열을 더할 경우

 

•  StringBuffer 클래스

-  문자열 연산이 많고 멀티쓰레드 환경일 경우

-  개발중인 시스템의 부분이 쓰레드에 안전한지 모를 경우

 

•  StringBuilder 클래스

-  문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 될 경우

-  쓰레드에 안전한지 여부가 전혀 관계없는 프로그램 개발시

 

 

 

반응형
Comments