(Java) String, StringBuffer, StringBuilder의 차이
오늘은, Java로 캐릭터 라인을 취급하는 클래스인 String, StringBuffer, StringBuilder에 대해 배우고, 차이를 정리해 보자.
String 클래스
String 클래스는 문자열을 다루는 클래스 중에서 가장 기본적인 클래스입니다.
String 클래스는, 일단 생성된 캐릭터 라인은 변경할 수 없다고 하는 불변인 오브젝트입니다.
이것은, String 오브젝트가 작성된 후에는 그 오브젝트의 내용을 변경할 수 없다는 것을 의미합니다.
따라서 String 객체를 만들려면 새 String 객체를 만들어야 합니다.
String str = "Hello";
str += " world";
위의 코드는 “Hello world” 문자를 출력하는 코드입니다.
그러나 String은 불변이므로 위의 코드는 새로운 String 객체를 생성하고 “Hello”와 “world”문자열을 결합한 새로운 String 객체를 생성합니다.
이로 인해 불필요한 메모리 낭비가 발생할 수 있다는 문제가 있습니다.
게다가 String 클래스는 멀티스레드 환기에 안전합니다.
즉, 여러 스레드에서 동시에 하나의 String 객체에 액세스해도 문제가 발생하지 않습니다.
StringBuffer 클래스
StringBuffer 클래스는 String 클래스와 마찬가지로 문자열을 처리하는 클래스 중 하나입니다.
그러나 StringBuffer 클래스는 String 클래스와 달리 변경 가능한 (mutable) 객체입니다.
즉, StringBuffer 객체가 생성된 후에도 그 내용을 변경할 수 있다.
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" world");
위의 코드에서는 StringBuffer 객체를 생성한 후 append() 메서드를 사용하여 문자열을 추가합니다.
따라서 StringBuffer를 사용하면 문자열을 변경할 때마다 새 객체를 만들지 않고 하나의 StringBuffer 객체를 다시 사용할 수 있습니다.
또한 StringBuffer 클래스는 String 클래스와 마찬가지로 멀티 스레드 환경에서 안전합니다.
즉, 여러 스레드에서 동시에 하나의 StringBuffer 객체에 액세스해도 문제가 발생하지 않습니다.
StringBuilder 클래스
StringBuilder 클래스는, StringBuffer 클래스와 거의 같은 기능을 제공하는 클래스입니다.
다만, StringBuffer 클래스와의 차이는, 멀티스레드 환경에서는 안정되어 있지 않다는 것입니다.
즉, 여러 스레드에서 동시에 하나의 StringBuilder 객체에 액세스하면 문제가 발생할 위험이 있습니다.
그러나 실제로는 일반적으로 다중 스레드 환경에서 작업하는 것이 일반적이지 않으므로 StringBuilder 클래스를 사용하는 것이 빠르고 효율적입니다.
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" world");
위의 코드에서는 StringBuilder 객체를 만든 후 append() 메서드를 사용하여 문자열을 추가합니다.
StringBuffer와 마찬가지로 StringBuilder를 사용하면 문자열을 변경할 때마다 새 개체를 만들지 않고 하나의 StringBuilder 개체를 다시 사용할 수 있습니다.
따라서 다중 스레드 환경에서 작업하지 않는 경우 StringBuilder 클래스를 사용하는 것이 더 효율적입니다.
정리
- String 클래스는 불변의 오브젝트로 한 번 생성된 캐릭터 라인은 변경할 수 없습니다.
- StringBuffer 클래스는, 변경 가능한 오브젝트로 캐릭터 라인을 변경할 수 있습니다.
멀티 스레드 환경에서 안전합니다. - StringBuilder 클래스는 StringBuffer 클래스와 거의 같은 기능을 제공합니다만, 멀티스레드 환경에서는 안전하지 않습니다.