StringBuilder

이유진·2024년 9월 27일

TIL

목록 보기
20/24

StringBuilder란?

  • String은 소위 불변(immutable) 객체라고 한다. 즉, String 객체는 한 번 생성되면 변경할 수 없다.

  • + 연산자를 사용하여 문자열을 연결하면, 연결할 때마다 새로운 문자열 객체가 생성된다는 것을 의미한다. 또한 이전에 있던 문자열은 JVM의 GC가 처리하게 된다.

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

  • 위와 같은 문제점을 해결하기 위해 StringBuilder가 등장하게 되었다. StringBuilder는 String과 다르게 mutable 한 성질을 가지고 있다. 즉, 값이 변할 수 있다는 것이다.

  • String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.

  • 따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuffer 또는 StringBuilder를 적극적으로 사용해보자.

  • StringBuffer와 StringBuilder의 차이는 멀티스레드 환경에서 thread-safe 여부가 다르다. StringBuffer는 thread-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번 인덱스의 전까지 
  • .subString()문자열의 일부분을 추출하는 메서드

  • 문자열의 특정 범위에 해당하는 부분 문자열을 가져올 수 있다.


👉 String으로 변환

StringBuilder sb = new StringBuilder("123456");
sb.toString();
  • .toStirng()은 객체를 사람이 읽을 수 있는 문자열로 변환하는 메서드
profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글