새소식

JAVA (개념, 알고리즘)

StringBuilder 사용법 (StringBuffer, String과 비교)

  • -

String은 불변 속성을 가지며, StringBuffer와 StringBuilder는 그렇지 않다.

즉, String은 concat이나 + 연산을 통해 값을 변경하게 되면, 기존의 String 메모리에서 값이 바뀌는 것이 아니라 기존의 String에 들어있던 값을 버리고 새로운 값을 할당받게 된다. 따라서 처음 할당한 String의 메모리 영역은 Garbage로 남아있다가 GarbageCollection에 의해 없어지게 된다.

 String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 사용하면 유리하다. 하지만 문자열 추가, 삭제, 수정 등의 연산이 자주 일어나는 경우에는 힙 메모리에 Garbage가 생성되고, 이는 힙 메모리 부족으로 이어져 프로그램의 성능에 치명적 영향을 끼칠 수 있다.

 

 이를 해결하기 위한 것으로 StringBuilder와 StringBuffer가 있다.

이 둘은 가변성을 가지며, append(), delete() 등 동일 개체 내에서 문자열을 변경할 수 있다. 따라서 문자열의 추가, 수정, 삭제가 빈번하게 발생할 경우 효율적이다.

 

그렇다면 이 둘의 차이점은 무엇일까? 

StringBuffer은 동기화를 지원하며, 멀티 쓰레드 환경에서 안전하다.

StringBuilder은 동기화를 지원하지 않아 멀티 쓰레드 환경에 사용하기 적합하지 않다.

대신 단일쓰레드에서는 StringBuffer보다 성능이 뛰어나다.

 

- StringBuilder 사용법

StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b").append(" ");

 

- StringBuilder 주요 메소드

  • StringBuilder append(String s) : StringBuilder 뒤에 값을 붙인다.
  • StringBuilder delete(int start , int end) : 특정 인덱스부터 인덱스까지를 삭제한다.
  • StringBuilder insert(int offet, any primitive of a char[]) : 문자를 삽입한다.
  • StringBuilder replace(int start , int end , String s) : 일부를 String 객체로 치환한다.
  • StringBuilder reverse() : 순서를 뒤집는다.
  • StringBuilder setCharAt(int index , char ch) : 주어진 문자를 치환한다.
  • StringBuilder indexOf(String s) : 값이 어느 인덱스에 들어있는지 확인한다.
  • StringBuilder subString(int start, int end) : start와 end 사이의 값을 잘라온다.

 


참고 자료 : https://rlakuku-program.tistory.com/33

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.