본문 바로가기
Java

StringBuffer / StringBuilder

by hunbal 2023. 5. 18.
SMALL

JAVA에서 문자열(String)은 불변(immutable)이므로, 한 번 생성되면 할당된 메모리 공간이 변하지 않습니다.

즉, 문자열을 수정하면 새로운 문자열 객체를 만들어야 합니다. 예를 들어 concat 메서드나 + 연산자로 문자열을 연산하는 경우, 기존 문자열에 새로운 문자열이 붙는 것이 아니라 새로운 객체를 생성합니다.

이는 메모리 사용량을 증가시킬 수 있습니다.

 

String str = "hello";   // String str = new String("hello");
str = str + " world";  // hello world

 

StringBuffer

Java에서 문자열을 처리하기 위한 클래스 중 하나로, 문자열을 저장하고 수정하는 데 사용됩니다.

 

그러나 StringBuffer는 가변(mutable)이므로,

문자열을 수정할 때마다 새로운 문자열 객체를 생성하지 않고, 기존의 문자열 을 수정할 수 있습니다.

이로 인해 메모리 사용량을 줄일 수 있습니다.

 


StringBuffer 클래스는 문자열을 추가, 삽입, 삭제, 치환 등 다양한 작업을 수행할 수 있는 메서드를 제공합니다.

멀티스레드 환경에서 안전하게 사용할 수 있도록 동기화(synchronization)되어 있으므로,

여러 스레드에서 동시에 문자열을 수정하더라도 문제가 발생하지 않습니다.

 

 

예시

다음과 같은 코드를 사용하여 StringBuffer를 생성하고 문자열을 추가할 수 있습니다.

StringBuffer sb= new StringBuffer("hello");
sb.append(" world");

StringBuffer 객체를 생성하고, append() 메서드를 사용하여 "hello"와 "world" 문자열을 추가합니다.

이후, StringBuffer에 저장된 문자열은 sb.toString() 메서드를 사용하여 String 객체로 변환할 수 있습니다.


StringBuilder

 

StringBuilder는 Java에서 문자열을 처리하기 위한 또 다른 클래스입니다. 
StringBuilder는 StringBuffer와 마찬가지로 가변(mutable)한 문자열을 처리할 수 있으며, 

문자열을 추가, 삽입, 삭제, 치환하는 등의 작업을 수행할 수 있습니다. 

 

그러나 StringBuffer와 달리 동기화되지 않으므로 멀티스레드 환경에서의 안전성은 보장되지 않습니다

따라서 단일 스레드 환경에서 문자열을 처리할 때 성능이 더 좋을 수 있습니다.


예시

StringBuffer sb= new StringBuffer("hello");
sb.append(" world");

위의 코드는 StringBuilder 객체를 생성하고, append() 메서드를 사용하여 "hello"와 "world" 문자열을 추가합니다.

StringBuilder는 내부적으로 동적으로 크기가 조정되는 버퍼를 사용하여 문자열을 처리하므로, 문자열을 수정할 때 메모리 할당 및 복사가 발생할 수 있습니다. 이는 연속적인 문자열 연산이 많은 경우 성능상 이점을 가져올 수 있습니다.


 


StringBuilder와 StringBuffer는 대부분의 상황에서 유사한 기능을 제공하므로, 문자열 연산이 많을 때

단일 스레드 환경에서는 StringBuilder를, 멀티스레드 환경에서는 StringBuffer를 사용하는 것이 일반적입니다.

 

 

 

댓글