프로그래밍언어/Java(초급)
4. StringBuilder & StringBuffer 클래스 다루기
꿈뻑이의 코딩스토리
2020. 3. 27. 02:26
앞에서 배운것 처럼 문자열 결합시 새로운 인스턴스가 계속해서 생겨나기 때문에 for 문을 돌면서 지속적으로 문자열을 결합하는 형태의 프로그램은 성능에 큰 영향을 미친다.
이 경우StringBuffer와StringBuilder클래스는 기본적으로 동일한 클래스 이며 문자열을 결합하는데 유용하다. 두 클래스의 차이는멀티스레드에 안전하게 처리되었는지의 차이로StrinfBuffer의 경우Thread safe로 멀티스레드 처리에 안전하지만 성능이 저하될 수 있다. 따라서 멀티스레드 처리가 없는 프로그램이라면 StringBuilder 유리하다고 할 수 있다.
import java.util.*;
public class StringBuilder {
public static void main(String[] args) {
StringBuilder strBuf =new StringBuilder("AB");
/*문자 더하기*/
strBuf.append(25);
/*차례대로 문자 더하기*/
strBuf.append('Y').append(true); //this반환 이기때문에 인스턴스를 생성하지 않는다.
System.out.println(strBuf);
/*인덱스 문자 삽입*/
strBuf.insert(1,false);
strBuf.insert(strBuf.length(), 'Z');
System.out.println(strBuf);
StringBuilder strBuf2 = new StringBuilder("ABCDEFG");
/*인덱스문자 삭제*/
System.out.println(strBuf2.deleteCharAt(0));
/*역순 출력*/
System.out.println(strBuf2.reverse());
}
}
/*output====================
AB25Ytrue
ABfalse25YtrueZ
BCDEFG
GFEDCB
*/
StringBuilder
문자열의 저장 및 변경을 위한 메모리공간을(버퍼)내부에 지니는데 이 크기는 자동으로 조절되는 특징이 있다.
StringBuilder은 버퍼의 크기를 스스로 확장한다.
내부에 존재하는 버퍼는 자동으로 크기가 증가하도록 설계되어있다. 그러나 필요에 따라서는 그 크기를 조절할수 있다.
- public StringBuilder()
- public StringBuilder(int capactiy) //capacity개의 문자 저장 버퍼 생성
- public StringBuilder(String str) // str.length() + 16개의 문자 저장버퍼생성
버퍼의 크기를 확장하는 작업은 많은 연산이 요구되는 작업이므로 가급적이면 필요로하는 버퍼의 크기를 미리 할당하는 것이 성능에 도움이 된다.
reference
https://docs.oracle.com/javase/8/docs/api/index.html
Java Platform SE 8
docs.oracle.com