잦은 변경이 필요할 경우 String은 속도가 느리고 부담이 될 수 있어 StringBuilder를 사용하라는 말을 종종 봄.
String은 왜 느리고 부담스러운 존재인가?
String 과 String Builder의 차이
- String은 변경 불가능, 추가할때마다 새로운 String을 만들고 이전 String은 garbage가 됨
- 새로운 String을 만들 때 마다 hip memory를 allocation 받아야 하므로 속도가 느리고 서버에 부담이 된다. 또한 garbage가 발생하므로 메모리 절약 측면에서도 좋지 못함
⇒ 이러한 단점 극복 위해 String builder 사용
String Builder로 String 생성하기
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);
- appand() 메소드
- StringBuilder의 객체를 생성
- 객체.append(”문자열”)로 객체에 문자열 생성
- String 변수에 넣을 때는 toString() 메소드 사용하여 String 객체로 변환
String Builder 주요 메소드
- 생성자
- StringBuilder sb = new StringBuilder(): 객체 선언
- StringBuilder sb = new StringBuilder("aaa"): 문자열을 바로 넣을 수도 있다.
- 주요 메소드
- .append(): 문자열을 추가한다. ( sb.append("bbb"), sb.append(4) )
- .insert(int offset, String str): offset 위치에 str을 추가한다. (sb.insert(2, "ccc"))
- .replace(): 첫번째와 두번째 파라미터로 받는 숫자 인덱스에 위치한 문자열을 대체한다. (.replace(3, 6, "ye"))
- .substring(int start, (int end)): 인덱싱. 파라미터가 하나라면 해당 인덱스부터 끝까지, 두개라면 시작점과 끝점-1 까지 인덱싱 (sb.substring(5), sb.substring(3, 7))
- .deleteCharAt(int index): 인덱스에 위치한 문자 하나를 삭제한다. (sb.deleteCharAt(3))
- .delete(int start, int end): start 부터 end-1 까지의 문자를 삭제한다. (sb.delete(3, sb.length()))
- .toString(): String으로 변환한다. (sb.toString())
- .reverse(): 해당 문자 전체를 뒤집는다. (sb.reverse())
- .setCharAt(int index, String s): index 위치의 문자를 s로 변경
- .setLength(int len): 문자열 길이 조정, 현재 문자열보다 길게 조정하면 공백으로 채워짐, 현재 문자열보다 짧게 조정하면 나머지 문자는 삭제
- .trimToSize(): 문자열이 저장된 char[] 배열 사이즈를 현재 문자열 길이와 동일하게 조정, String 클래스의 trim()이 앞 뒤 공백을 제거하는 것과 같이 공백 사이즈를 제공하는 것, 배열의 남는 사이즈는 공백이므로, 문자열 뒷부분의 공백을 모두 제거해준다고 보면 됨
- 출처
- https://onlyfor-me-blog.tistory.com/317
- https://da2uns2.tistory.com/entry/Java-StringBuilder-사용법과-주요-메소드