old/Java

java.lang.StringBuffer/StringBuilder

물 개 2020. 11. 16. 13:51

문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다.

String의 replace() 메소드도 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴한다.

String 객체를 + 연산할 때도 마찬가지.

 

String 타입 변수에 새로운 String 객체를 대입할 수록 그 만큼 Heap 영역에 객체가 쌓여 프로그램 성능을 느리게 한다.따라서 문자열을 변경하는 작업이 많을 경우에는 StringBuffer/StringBuilder를 사용하는 것이 좋다.

이 두 클래스는 내부 버퍼에 문자열을 저장해두고, 그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어있다.

 

차이점

StringBuffer : 멀티 스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어서 스레드에 안전.

StringBuilder : 단일 스레드 환경에서만 사용 가능.

 

생성자

//매개변수 없는 생성자. 기본 버퍼 크기=16자
StringBuilder sb = new StringBuilder();

//int 매개변수를 갖는 생성자. 버퍼 크기=int값
StringBuilder sb = new StringBuilder(16);

//문자열 매개변수를 갖는 생성자. 버퍼 초기값=문자열
StringBuilder sb = new StringBuilder("Java");

 

메소드

메소드명 설명
append(...) 문자열 끝에 주어진 매개값을 추가
insert(int offset, ...) 문자열 중간(offset 위치)에 주어진 매개값을 추가
delete(int start, int end) 문자열의 일부분(start~end)을 삭제
deleteChatAt(int index) 문자열에서 특정 index의 문자를 삭제
replace(int start, int end, String str) 문자열의 일부분(start~end)을 다른 문자열로 대치
reverse() 문자열의 순서를 뒤바꿈
setCharAt(int index, char ch) 문자열에서 특정 index의 문자를 다른 문자로 대치