자바에서 문자열을 다루는 데에는 String, StringBuffer, 그리고 StringBuilder 클래스가 사용됩니다.

String 클래스



불변(Immutable)성: String 객체는 생성된 후에는 변경할 수 없습니다. 따라서 문자열을 수정하면 새로운 문자열이 생성됩니다.
스레드 안전(Thread Safe): String은 스레드 안전합니다. 여러 스레드에서 동시에 접근하더라도 안전하게 사용할 수 있습니다.

장점
불변성으로 인해 예상치 못한 변경을 방지합니다. 이는 코드의 안정성을 높입니다.
문자열 리터럴과 동일한 문자열을 사용하는 경우, 자바의 문자열 풀에 의해 캐싱되어 재사용될 수 있어 메모리를 절약할 수 있습니다.

단점
문자열을 수정할 때마다 새로운 문자열을 생성하므로 성능 저하가 발생할 수 있습니다.

 

StringBuffer 클래스



가변(Mutable)성: StringBuffer는 문자열을 변경할 수 있습니다. 따라서 문자열을 동적으로 조립하거나 수정하는 데 사용됩니다.
스레드 안전(Thread Safe): StringBuffer는 스레드 안전하게 동기화되어 여러 스레드에서 안전하게 사용할 수 있습니다.

장점
문자열을 동적으로 변경할 수 있어 문자열 조립 또는 수정에 용이합니다.
스레드 안전하므로 멀티스레드 환경에서 사용할 수 있습니다.
단점
스레드 동기화 덕분에 단일 스레드 환경에서는 성능 저하가 발생할 수 있습니다.

StringBuilder 클래스

 


가변(Mutable)성: StringBuilder는 문자열을 변경할 수 있으며, StringBuffer와 유사하지만 스레드 동기화를 제공하지 않습니다.
스레드 안전이 아님: StringBuilder는 스레드 동기화가 필요하지 않아 단일 스레드 환경에서 사용하는 것이 성능상 이점이 있습니다.

장점
문자열 조립 또는 수정에 사용할 수 있으며, StringBuffer보다 빠른 성능을 제공합니다.
스레드 동기화가 필요하지 않은 단일 스레드 환경에서 사용하기에 적합합니다.

 

단점

멀티스레드 환경에서는 스레드 동기화가 필요한 경우 StringBuffer를 사용해야 합니다.


스레드 안전(Thread Safe)



StringBuilder 클래스는 StringBuffer와 비슷하게 가변 문자열을 다루지만, 스레드 동기화를 제공하지 않습니다.
이 클래스는 단일 스레드 환경에서 사용하기에 적합하며, 멀티스레드 환경에서는 스레드 동기화가 필요한 경우 StringBuffer를 사용해야 합니다.

 

 

어떤 클래스를 선택해야 하는가?

문자열을 변경할 필요가 없는 경우(불변성을 유지해야 하는 경우)에는 String을 사용합니다.
멀티스레드 환경에서 안전하게 사용해야 할 때에는 String 또는 StringBuffer를 사용합니다.
단일 스레드 환경에서 문자열을 동적으로 조립하거나 수정해야 할 때에는 StringBuilder를 사용합니다.
성능이 중요한 상황에서는 StringBuilder가 StringBuffer보다 성능이 좋을 수 있습니다.
각 클래스는 상황에 따라 선택되며, 문자열 조작의 목적과 환경에 따라 적합한 클래스를 사용해야 합니다.



참조

https://12bme.tistory.com/42

'Java' 카테고리의 다른 글

[Java] Generics  (0) 2023.10.03
[Java] StringBuilder 사용법  (0) 2023.10.03
[Java] Wrapper class  (0) 2023.10.03
[Java] Math 클래스  (0) 2023.10.03
[Java] enum (열거형)  (0) 2023.10.03