코딩항해기

[JAVA] StringBuilder 본문

JAVA

[JAVA] StringBuilder

miniBcake 2024. 9. 10. 10:30

 

 

StringBuilder

String은 불변(immutable)객체로 String은 한 번 생성되면 변경될 수 없다. 즉, 연결연산자를 사용해 문자열을 연결하면 연결 할 때마다 기존의 String 객체는 가비지 컬렉터로 들어가고, 새로운 String 객체가 생성된다. 이러한 행위는 메모리를 많이 소모하게 된다.

 

이러한 점을 해결하기 위한 것이 StringBuilder로, StringBuilder는 변경 가능한 문자열을 만든다. StringBuilder의 연결은 새로운 객체를 생성하는 것이 아닌 기존 데이터에 연결하는 방식으로 속도도 빠르고 부하도 적다.

긴 문자열을 더하거나, 자주 더할 때 사용하면 용이하다. (비슷한 종류로는 StringBuffer가 있다.)

 

StringBuilder와 StringBuffer의 차이

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

 

 

상황에 따른 String, StringBuilder, StringBuffer 추천

String 문자열 변경이 빈번하지 않을 때
StringBuilder 문자열이 빈번하게 변경되면서 멀티쓰레드 환경이 아닐 때
StringBuffer 문자열이 빈번하게 변경되면서 멀티쓰레드 환경일 때

 

 

StringBuilder 객체만들기

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

StringBuilder sb1 = new StringBuilder(20);
//int 타입의 값을 넣으면 buffer의 사이즈(capacity)를 지정한다.

StringBuilder sb2 = StringBuilder("문자열");
//해당 문자열을 가진 StringBuilder가 생성된다.

 

 

StringBuilder 메서드

.append() 인자로 받은 값을 문자열에 누적하여 추가한다.
.insert(int num, String str) 특정 위치에 문자열을 삽입한다.
.replace(int num1, int num2, String str) 첫 번째와 두 번째 인자로 받는 숫자 인덱스에 위치한 문자열을 대체한다.
.delete(int num1, int num2) 문자열의 특정 부분을 삭제한다. (첫 번째 인자가 시작, 두 번째 인자가 끝 인덱스(끝 인덱스는 제외))
.substring() 파라미터가 하나라면 해당 인덱스부터 끝까지 인덱싱하고, 두 개라면 첫 번째 인자가 시작, 두 번째 인자가 끝 인덱스(제외)가 되어 인덱싱한다. 
.deleteCharAt(int num) 인자로 받은 인덱스의 문자 하나를 삭제한다.
.toString()  StringBuilder 객체를 String으로 반환한다.
.reverse() 해당 문자 전체를 뒤집는다.
.setCharAt(int num, String str) 인자로 받은 인덱스의 위치의 문자를 두 번째 인자 값으로 변경한다.
.setLength(int num) 문자열 길이 조절로 현재 문자열보다 길게 조정하면 공백으로 채워지고, 짧게 조정하면 나머지 문자는 삭제된다.
.trimToSize() 여분의 메모리 공간을 해제해 StringBuilder의 용량을 현재 문자열 길이로 줄인다.

 

'JAVA' 카테고리의 다른 글

[JAVA] 파라미터 전달해 main() 실행 (String[] args / eclipse, intellij)  (0) 2024.10.01
[JAVA] Enum  (0) 2024.09.28
[JAVA] POJO  (0) 2024.08.21
[JAVA] 파일 입출력  (0) 2024.07.29
[JAVA] 스레드 Thread  (0) 2024.07.28