String, StringBuilder, StringBuffer의 이해
위 세 가지 클래스는 모두 문자열을 담아주는 클래스라는 것이다.
그렇다면 어떠한 차이점 때문에 세 개의 클래스를 활용하게 되는 것일까?
불변성(immutable), String과 StringBuilder / StringBuffer 차이
넓은 범주에서 String과 StringBuilder / StringBuffer로 분류할 수 있다.
String은 StringBuilder / StringBuffer와 달리 불변성이라는 특징을 가지기 때문이다.
String은 한번 선언이 되면 그 값이 변하지 않는다.
가령
String str = "example";
str = "changed";
로 str을 변경할 수 있기 때문에 가변적이라고 생각 할 수 있지만,
실제로는 str = "example";는 GC(Garbage Collection)에 넘어가게 되며 str = "changed";는 새로운 공간에 할당 되는 것이다.
따라서 String을 유용하게 사용하기 위해서는 변하지 않는 값을 활용할 때 사용하는 것이 바람직하다.
반면에, 가변성의 특징을 지닌 StringBuilder / StringBuffer는 문자열을 자주 변경해야하는 환경에서 좀 더 유용하게 활용할 수 있다.
즉, 문자열의 추가, 삽입, 삭제가 발생할 수 있는 경우에 사용하는 것이 바람직하다.
StringBuilder와 StringBuffer의 차이
StringBuilder와 StringBuffer의 차이점은 동기화의 유무로 구분할 수 있다.
StringBuilder 동기화를 지원하지 않으며 멀티 쓰레드 환경에서 StringBuffer에 비해 안정성이 떨어집니다.
다만, 동기화를 고려하지 않기 때문에 단일 쓰레드 환경에서 성능이 StringBuffer에 비해 우수합니다.
반면에, StringBuffer는 동기화를 지원하며 멀티 쓰레드 환경에서 thread-safe합니다. 하지만 동기화를 고려하기 때문에 단일쓰레드에서 StringBuilder에 비해 성능이 부족합니다.
정리하며
String | StringBuffer | StringBuilder | |
불변성 | O | X | X |
스레드 안정성 | O | O | X |
성능 | 느림 | 준수 | 빠름 |
정리하자면 다음과 같다.
- String: 변화가 크지 않은 간단한 코드를 구현할 때
- StirngBuffer: 다중 스레드 환경에서 안전한 문자열 조작을 필요할 때
- StringBuilder: 단일 스레드 환경에서 많은 문자열을 빠르게 수행해야할 때
사용하는 것으로 하자
'Back-End > Java' 카테고리의 다른 글
[ 자바 ] BufferedReader 와 Bufferedwriter의 사용법 (0) | 2023.07.19 |
---|---|
[ 자바 ] Scanner와 BufferedReader의 차이 (0) | 2023.07.19 |
[ Java ] SOLID (객체 지향 설계)란 무엇일까?! (0) | 2022.11.22 |
[ Spring ] AOP (Aspect-Oriented Programming)란 무엇일까?! (0) | 2022.11.15 |
[ Spring ] Asciidoc란 무엇일까?! (0) | 2022.11.11 |