-
[Java] String, StringBuffer, StringBuilder 차이점JAVA 2024. 3. 25. 14:04반응형
1. String
String 객체는 한번 할당된 공간이 변하지 않는다고 해서 'immutable(불변)'자료형 이라고 불린다.
또한 String 객체는 + 연산자 또는 concat 메서드를 통해 기존에 생성된 String 객체에 문자열을
붙이는게 아니라 기존 문자열을 삭제한 후 새 String 객체에 연결된 문자열을 저장하고 그
객체를 참조하는 것이다.
- String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성.
한번 생성된 객체의 내부 내용을 변화시킬 수 없다. 기존 객체가 제거되면 Java 의 가지비
컬렉션이 회수한다.
Immutable 한 객체는 간단하게 사용가능하고, 동기화에 대해 신경쓰지 않아도
되기 때문에(Thread - safe), 내부 데이터를 자유롭게 공유 가능하지만 추가 / 삭제 연산이
많으면 성능이 좋지 않다.
2. StringBuffer / StringBuilder
StringBuffer / StringBuilder 는 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우,
기존의 버퍼 크기를 늘리며 유연하게 동작한다. 또한 StringBuffer / StringBuilder 는 제공하는
메서드도 똑같고 사용하는 방법도 동일하다.
1) StringBuffer / StringBuilder 차이점
둘의 차이점은 딱 한가지로 멀티 쓰레드(Thread)에서 안전(safe)한지 아닌지의 차이 뿐이다.
StringBuffer 클래스는 쓰레드에서 안전하다. (thread safe)
StringBuilder 클래스는 쓰레드에서 안전하지 않다. (thread unsafe)
두 클래스는 문법이나 배열구성도 모두 같지만, 동기화(Synchronization) 에서의 지원 유무가
다르다. StringBuilder 는 동기화를 지원하지 않는 반면, StringBuffer 는 동기화를 지원하여
멀티 스레드 환경에서도 안전하게 동작할 수 있다. 그 이유는 StringBuffer 는 메서드에서
synchronized 키워드를 사용하기 때문이다.
더 자세한 내용은 <참조>를 확인하면면 된다.
2) StringBuffer / StringBuilder 성능 비교
성능은 StringBuilder 클래스가 더 좋다. StringBuffer / StringBuilder 의 차이는 쓰레드 안정성에
있다고 했는데 아무래도 쓰레드 안정성을 버린 StringBuilder 가 좀더 떨 따지고 연산 하니 당연히
좀 더 빠를 수 밖에 없다.
3. 문자열 자료형 정리
String 을 사용해야 할 때
● String 은 불변성
● 문자열 연산이 적고 변하지 않는 문자열을 자주 사용할 경우
● 멀티쓰레드 환경일 경우
StringBuilder 를 사용해야 할 때
● StringBuilder 는 가변성
● 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우
● 동기화를 지원하지 않아, 단일 쓰레드이거나 동기화를 고려하지 않아도 되는 경우
● 속도면에선 StringBuffer 보다 뛰어남
StringBuffer 를 사용해야 할 때
● StringBuffer 는 가변성
● 문자열의 추가, 수정, 삭제 등이 빈번히 발행하는 경우
● 동기화를 지원하여, 밀티 스레드 환경에서도 안전하게 동작
4. 주요 메서드
[Java] StringBuffer / StringBuilder 주요 메서드
코드로 보는 StringBuffer / StringBuilder 주요 메서드
opidea.tistory.com
'JAVA' 카테고리의 다른 글
[Java] 동적 계획법 (DP: Dynamic programmig) 이해하기 <적용문제> (2) 2024.04.03 [Java] StringBuffer / StringBuilder 주요 메서드 (1) 2024.03.26 [Java] nextInt() 사용 후 nextLine() 사용시 문제점 해결 (4) 2024.03.22 [Java] 자바 ArrayList 사용 방법 <적용문제> (2) 2024.03.15 [Java] 참조 타입과 참조 변수 (1) 2024.02.01