[Java] StringBuilder 사용법

rara_kim·2022년 11월 21일
0

Java

목록 보기
32/39

StringBuilder란?

String은 소위 불변(imuutable)객체라고 한다.  즉, String 객체는 한번 생성되면 변경할 수 없다.
+ 연산자를 사용하여 문자열을 열결할 수 있으나,연결할 때마다 새로운 문자열 객체가 생성되고 이전에 있던 문자열은 JVM의 GC가 처리하게 된다.

따라서 String 객체와 String 객체를 더하는 행위는 메모리 할당과 메모리 해제를 발생시켜, 연산이 많아진다면 성능상 좋지 않다.

이와같은 문제점을 해결하기 위해 StringBuilder가 등장하게 되었다.
StringBuilder는 String과 다르게 mutable한 성질을 가지고 있다. 즉, 값이 변할 수 있다.
StringBuilder는 문자열과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.

따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder 혹은 StringBuffer를 사용하는 것이 좋다.

StringBuilder와 StringBuffer의 차이점

StringBuffer와 StringBuilder는 멀티스레드 환경에서 thread-safe 여부가 다르다.
StringBufferthread-safe 하므로 여러 쓰레드에서 동시에 해당 문자열에 접근한다면 사용을 고려하고, 그렇지 않다면 StringBuilder를 사용하는 것이 성능에 더 유리하다. (성능과 thread-safe는 반비례라고 생각하면 된다.)


StringBuilder 사용법

생성

StringBuilder sb = new StringBuilder();         //기본 생성자

StringBuilder sb = new StringBuilder(20);       //사이즈를 지정하여 생성

StringBuilder sb = new StringBuilder("hello");  //문자열을 인자로 받아 생성

문자열 추가

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append("java");

특정 위치에 문자열 삽입

StringBuilder sb = new StringBuilder("he world");
sb.insert(2, "llo");    //2번 인덱스 위치에 문자열 삽입
System.out.println(sb);     //"hello world"

문자열 삭제

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

sb.delete(6, 9);      // 6번 인덱스부터 9번 인덱스의 전까지 삭제

특정 위치의 문자 삭제

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

sb.deleteCharAt(6);   //6번 인덱스 위치의 문자 삭제

문자열을 역순으로 리턴

StringBuilder sb = new StringBuilder("hello");
System.out.println(sb.reverse());     //"olleh"

특정 위치의 문자열을 문자열을 대체(replace)

StringBuilder sb = new StringBuilder("123456");
System.out.println(sb.replace(0, 1, "A"));        //A23456
System.out.println(sb.replace(0, 2, "A"));        //A3456

특정 위치의 문자열을 문자열을 변경(setCharAt)

StringBuilder sb = new StringBuilder("123456");
sb.setCharAt(0, '*');
System.out.println(sb.toString());    //*23456

문자열 자르기

StringBuilder sb = new StringBuilder("123456");
System.out.println(sb.substring(0, 2));    //1 2, 0번 인덱스부터 2번 인덱스의 전까지 

String으로 변환

StringBuilder sb = new StringBuilder("123456");
sb.toString();

profile
느리더라도 꾸준하게

0개의 댓글