Java String / StringBuffer / StringBuilder 정리

jj J·2022년 10월 24일
1

JAVA

목록 보기
2/15

Java String에 대한 정리와 StringBuffer, StringBuilder에 대한 비교를 진행하려한다.

String이 참조자료형인 이유?

기본자료형과 참조자료형의 차이는 기본값이 있냐 없냐, null 값을 가질 수 있냐 없냐로 구분할 수 있습니다. String은 기본값을 가지지 않고, 초기화하지않을 경우 null 주소 값을 가집니다.

String와 StringBuffer, StringBuilder 차이점 비교

String과 StringBuffer, StringBuilder의 가장 큰 차이점은 String은 불변의 속성을 갖는다는 점입니다. String은 값이 바뀌면 해당 변경된 값을 가지고 있는 새로운 String 인스턴스가 생성되고 해당 메모리 주소를 가리키게 됩니다. 따라서, 변하지 않는 문자열을 자주 읽어들일 경우 String을 사용하면 좋습니다.

하지만 문자열 추가, 수정, 삭제 등의 연산이 자주 일어나면 이러한 동작은 힙 메모리에 많은 가비지를 생성하게 만들어 성능에 좋지 않은 영향을 미치게 됩니다. 이러한 단점을 해결하기 위해 가변성을 지니는 StringBuffer / StringBuilder 클래스를 사용합니다.
이 클래스들은 동일 객체 내에서 문자열을 변경하는 것이 가능합니다.
이 두 클래스 StringBuffer와 StringBuilder도 차이점이 있는데 Thread Safe 유무입니다.

StringBuffer는 데이터를 처리하는 주요 로직이 syncronized로 감싸져있어 멀티스레드 환경에서 안전합니다. 반면, StringBuilder는 이러한 처리가 되어있지 않아 thread safe하지 않습니다.
따라서, 멀티스레드 환경에서 자주 수정될 문자열이라면 StringBuffer를 사용하고, 단일스레드 환경이라면 StringBuilder를 사용하면 됩니다. 동기화를 고려하지 않는만큼 단일 스레드에서 성능은 StringBuffer보다 뛰어납니다.

최종 정리

  1. String - 문자열 연산이 적고 멀티스레드 환경일 경우
  2. StringBuffer - 문자열 연산이 많고 멀티스레드 환경일 경우
  3. StringBuilder - 문자열 연산이 많고 단일스레드 환경일 경우

사진 출처 : https://ifuwanna.tistory.com/221

profile
매일 발전

0개의 댓글