String, StringBuilder, StringBuffer 각각의 차이에 대해 설명해주세요.

String, StringBuilder, StringBuffer 각각의 차이에 대해 설명해주세요.

String, StringBuilder, StringBuffer은 자바에서의 문자열 처리에 가장 많이 사용되는 세 클래스입니다.

불변성

String 클래스 특징

- 문자열 처리 및 관리하는 클래스

- immutable(불변성)의 특징이 있어 문자열 연산 작업 시 비효율적

한 번 생성된 객체의 메모리가 불변이기 때문에, 메모리가 모두 각각 할당

String 클래스의 장. 단점

장점

- 간단하게 사용 가능

- Thread-safe

- 단순 조회나 자주 사용하는 경우 빠르게 읽을 수 있다.

단점

- 연산 작업에 쓰기에는 효율이 떨어짐

String a라는 변수에 값을 담기 위해 메모리를 할당하는 상황을 예로 설명해보겠습니다.

String a = "Hello"; // hello 값이 담긴 메모리가 생성되고, a는 메모리 주소를 참조합니다.

여기에 " World"라는 문자열을 더해주면, 기존의 생성된 메모리에 값이 추가되는 것이 아니라

"Hello World"라는 값을 가진 새로운 String 객체를 만들어지고,

기존의 "Hello"가 담긴 메모리 공간은 GC에의해 비워지게 되는 것입니다.

가변성

StringBuilder, StringBuffer 공통점

두 개의 클래스는 모두 mutable(가변성)을 가지고 있습니다.

불변성 = 메모리가 고정 할당

가변성 = 문자열이 추가/삭제될 때 버퍼의 크기를 늘리거나 줄이는 등 메모리를 유동적으로 사용

StringBuilder, StringBuffer 차이점

StirngBuilder와 StringBuffer의 차이점은 실행 환경입니다.

StirngBuilder : NOT Thread-safe 스레드에 안전한지 여부 관계없음 - 싱글 스레드

StringBuffer : Thread-safe. 스레드에 안전한 프로그램 개발할 때 혹은 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 - 멀티 스레드

정리하자면 다음과 같습니다.

728x90

from http://seongeun-it.tistory.com/197 by ccl(A) rewrite - 2021-09-21 15:27:36