728x90
String, StringBuilder, StringBuffer 차이점
- String 객체는 한번 생성되면 할당된 공간이 변하지 않는다.
- String 객체는 concat 또는 + 연산자를 통해 기존 생성된 String 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아닌, 새로운 String 객체를 만든 후 문자열을 저장하고 그 객체를 참조한다.
- 즉 String 객체는 concat 또는 + 연산자를 많이 사용 할 수록 String 객체의 수가 늘어나기 때문에 성능이 느려진다.
- StringBuffer나 StringBuilder의 경우 객체의 공간이 부족해 지는 경우 버퍼의 크기를 유연하게 늘려준다.
- 이러한 특징을 String은 불변(immutable)하고 StringBuffer와 StringBuilder는 가변(mutable)하다.
StringBuilder, StringBuffer 같은점, 차이점
같은점
- StringBuilder와 StringBuffer는 둘 다 크기가 유연하게 변하는 가변적인 특성을 가진다.
- 제공하는 메소드도 같고 사용하는 방법도 동일하다.
차이점
- 두 클래스는 동기화 지원의 유무가 다르다.
- StringBuffer는 각 메소드 별로 synchronized keyword가 존재하여 멀티 스레드 상태에서 동기화 지원.
- StringBuilder는 단일 스레드 환경에서만 사용하도록 설계되어 있다.
- StringBuffer는 멀티 스레드 환경에서도 안전하게 동작할 수 있다.
정리
- String
- 짧은 문자열을 더할 경우
- 문자열 연산이 적고 멀티 스레드 환경일 경우
- StringBuffer
- 스레드에 안전한 프로그램이 필요하거나, 개발 중인 시스템의 부분이 스레드에 안전하지 모를 경우
- 문자열 연산이 많고 멀티 스레드 환경일 경우
- StringBuilder
- 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 경우
- 문자열 연산이 많고 단일 스레드이거나 동기화를 고려하지 않아도 되는 경우
728x90
'Java & Spring' 카테고리의 다른 글
[JAVA] Overriding 오버라이딩 (0) | 2022.03.23 |
---|---|
[JAVA] Immutable Object(불변객체) (0) | 2022.03.22 |
[JAVA] StringBuilder 사용법. 특징 (0) | 2022.03.20 |
[JAVA] contains() 사용법. 특정 문자열 포함 여부 (0) | 2022.03.19 |
[JAVA] compareToIgnoreCase() 문자열 대소문자 구분 없이 비교 (0) | 2022.03.18 |