우당탕탕

[Java] String, StringBuilder, StringBuffer의 차이와 장단점 본문

언어/Java

[Java] String, StringBuilder, StringBuffer의 차이와 장단점

모찌모찝 2024. 1. 29. 18:30
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는 멀티쓰레드 환경에서 동기화가 보장되도록 설계되어 있기 때문에 이러한 동기화 처리로 인해 성능면에서 오버헤드가 발생할 수 있다.

Comments