String vs StringBuffer / StringBuilder
2023. 8. 23. 21:30ㆍLanguage/Java
String / StringBuffer / StringBuilder
- Java에서 문자열을 다루는 대표적인 클래스
→ 모두 다 String을 저장하고 관리 - 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용해도 된다.
- 연산횟수가 많아지거나 멀티쓰레드 등의 상황이 자주 발생한다면, 상황에 맞는 클래스를 사용해야 한다.
String vs StringBuffer / StringBuilder
- 차이점 : 불변성 vs 가변성
String
String 클래스의 참조변수 str이 "hello"라는 값을 가리키도록 선언하고,
이후 str이 가리키는 곳에 저장된 "hello"에 "world"라는 값을 추가적으로 더한다면
str이 가리키는 '그' 공간에 변화가 있을 것 같지 않은가?
"hello"만 있던 공간이 "hello world"로 변화했을 것 같지만
그렇지 않다.
str은 "hello"가 있는 공간에서 "hello world"가 있는 공간을 가리키게 되는 것이다.
그리고 원래 "hello" 메모리 영역은 garbage collection에 의해 사라지게 된다.
String 클래스는 불변하기 때문에 문자열을 수정하는 시점에 새로운 String 인스턴스가 생성된 것이다.
→ String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들일 경우 String을 사용한다.
StringBuffer / StringBuilder
가변성을 갖기 때문에 동일 객체 내에서 문자열을 변경하는 것이 가능하다.
→ 문자열의 추가, 수정, 삭제가 빈번하게 발생할 경우라면 StringBuffer / StringBuilder를 사용해야 한다.
StringBuffer vs StringBuilder
- 차이점 : 동기화의 여부
- StringBuffer : 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다.
- StringBuilder : 동기화 키워드를 지원하지 않기 때문에 싱글쓰레드에서의 성능이 뛰어나다.
* 동기화 키워드 (synchronized)
여러개의 스레드가 한 개의 자원에 접근할려고 할 때,
현재 데이터를 사용하고 있는 스레드를 제외하고 나머지 스레드들이 데이터에 접근할 수 없도록 막는 역할
String | * 문자열 연산이 적은 경우 * 멀티쓰레드 환경일 경우 |
StringBuffer | * 문자열 연산이 많은 경우 * 멀티쓰레드 환경일 경우 |
StringBuilder | * 문자열 연산이 많은 경우 * 단일쓰레드 / 동기화를 고려하지 않아도 되는 경우 |
'Language > Java' 카테고리의 다른 글
Stream (0) | 2023.06.02 |
---|---|
[Java] TreeSet (0) | 2023.01.29 |
배열 출력하기 (0) | 2023.01.19 |
배열 순서대로 정렬하기 (0) | 2023.01.19 |
replace vs replaceAll (0) | 2023.01.18 |