우당탕탕
[Java] String, StringBuilder, StringBuffer의 차이와 장단점 본문
String, StringBuilder, StringBuffer 뭐가 다른 걸까?
String
String 클래스는 문자열을 불변(immutable)하게 처리한다. 한 번 생성된 문자열은 변경할 수 없으며, 문자열 연산 시에는 새로운 객체를 생성하게 된다. 이로 인해 메모리 소모가 크게 발생할 수 있으니 문자열 연산이 많은 경우에는 StringBuilder 또는 StringBuffer사용을 권장한다.
StringBuilder
StringBuilder는 가변(mutable)한 특성을 가지고 있어 문자열을 동적으로 변경할 수 있다. 문자열 연산을 효율적으로 처리할 수 있어 성능상의 이점이 있지만, StringBuilder의 경우 단일 스레드 환경에서 안전하지 않기 때문에 멀티스레드 환경에서 사용할 때에는 동기화를 고려해야 한다.
StringBuilder sb = new StringBuilder();
sb.append("Hello"); // 문자열 추가
sb.append("World");
String result = sb.toString(); // 결과 문자열 반환
System.out.println(result); // 출력: HelloWorld
StringBuffer
StringBuffer의 경우 StringBuilder와 동일하게 가변 한 특성을 가지고 있다. 하지만 StringBuffer의 경우 멀티스레드 환경에서 동기화가 보장되도록 설계되어 있어 멀티쓰레드 환경에서도 안전하게 사용할 수 있다. 단, StringBuilder에 비해 성능면에서는 약간의 차이가 있을 수 있다.
요약
1. String은 문자열 연산이 많은 경우에는 성능에 영향을 줄 수 있으니 연산이 많은 경우에는 StringBuilder 또는 StringBuffer를 이용하도록 하자.
2. StringBuilder는 단일스레드 환경에서, StringBuffer는 멀티스레드 환경에서 사용할 수 있다. 따라서 개발하고자 하는 상황에 맞게 선택해서 사용하자.
* 서버가 두대 이상인 경우에는 StringBuilder를 사용하자 StringBuffer는 멀티쓰레드 환경에서 동기화가 보장되도록 설계되어 있기 때문에 이러한 동기화 처리로 인해 성능면에서 오버헤드가 발생할 수 있다.
'언어 > Java' 카테고리의 다른 글
[Java] 자바 LTS(Long Term Support)란 무엇인가? (0) | 2024.09.28 |
---|---|
[JPA] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)에 대해 (1) | 2023.06.16 |
[Java] static(정적) 변수와 메모리에 대해 (0) | 2022.11.02 |
[Java] 람다 표현식, 람다(Lambda Expression)이란? (0) | 2022.09.12 |
[Java] 가비지 컬렉션(Garbage Collection) 알고리즘 (가비지 컬렉션 - 2) (0) | 2022.08.29 |