본문 바로가기

Java

[Java] StringBuffer, StringBuilder 클래스

문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴한다. String 객체를 + 연산할 경우에도 마찬가지다. 

 

String data = "ABC";
data += "DEF";

 

 

 

String 객체는 내부 데이터를 수정할 수 없으므로 "ABC" 에 "DEF" 가 추가된 "ABCDEF" 라는 새로운 String 객체가 생성된다.

그리고 data 변수는 새로 생성된 String 객체를 참조하게 된다.

 

 

 

 

  • 문자열을 결합하는 + 연산자를 많이 사용할수록 그만큼 String 객체의 수가 늘어나기 때문에 프로그램 성능을 느리게 하는 요인이 된다.
  • 문자열을 변경하는 작업이 많을 경우에는 String 클래스를 사용하는 것보다는 java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다.
    • 이 두 클래스는 내부 버퍼(데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고, 그 안에서 추가 수정 삭제 작업을 할 수 있도록 설계되어 있다.
  • StringBuffer : 멀티 스레드 환경에서 사용할 수 있도록 동기화 적용되어 있음
  • StringBuilder : 단일 스레드 환경에서만 사용하도록 설계되어 있음
// sb는 생성자로 주어민 매개값 "Java"를 버퍼의 초기값으로 저장한다. 
StringBuilder sb = new StringBuilder("Java");

 

 

 

출처

신용권, 이것이 자바다, 한빛미디어(2015), p514