프로그래밍언어/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