StringBuilder 란 ?
StringBuilder는 String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용
그렇기에 속도도 빠르며 상대적으로 부하가 적다.
따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder를 적극적으로 사용하면 된다.
[ String 클래스와 동일 메소드 ]
- charAt() - 특정 인덱스 위치의 문자 반환
- indexOf() / lastIndexOf() - 문자열 검색해서 위치 반환
- length() - 문자열 길이 반환
- replace() - 검색된 문자열 교체
- substring() - 특정 인덱스 범위 내 문자열을 복사해서 새로 생성된 인스턴스 반환
- toString() - 문자열 출력
public class Main
{
public static void main(String[] args)
{
String result2 = "프로그래밍 - ";
String java = "자바";
String android = "안드로이드";
String result = java + android;
result2 += java += android;
System.out.println(result);
System.out.println(result2);
}
}
이 String 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데, 덧셈 연산이 많아진다면 성능적으로 좋지 않다.
자바에서 String 객체는 변경 불가능하다. 한 번 생성되면 내용을 바꿀 수 없단 뜻이다.
따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어간다.
100만 개의 문자열을 연결해야 하는 상황이 왔다고 가정하자. 그리고 100만 개의 문자열을 추가로 생성했다고 하자.
문자열끼리 연결하는 작업 시에는 내부적으로 여러 작업이 발생하고, 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다.
이 경우 고려해볼 수 있는 것 중 하나가 이 포스팅의 주제인 StringBuilder다. Stirng은 변경 불가능한 문자열을 생성하지만 StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에, String을 합치는 작업 시 하나의 대안이 될 수 있다.
public class Main
{
public static void main(String[] args)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
// String str = stringBuilder; // String에 StringBuilder를 그대로 넣을 순 없다. toString()을 붙여야 한다
String str = stringBuilder.toString();
// 두 println()은 같은 값을 출력한다
System.out.println(stringBuilder);
System.out.println(str);
}
}
먼저 StringBuilder의 객체를 생성한 후, append()의 인자로 연결하고자 하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출한다. 그리고 출력 시에는 toString()을 붙여야 하고, String 변수에 넣을 때도 마찬가지다.
public class Main
{
public static void main(String[] args)
{
StringBuilder stringBuilder = new StringBuilder();
ArrayList<String> list = new ArrayList<>();
list.add("첫 번째, ");
list.add("두 번째, ");
list.add("세 번째, ");
list.add("네 번째, ");
list.add("다섯 번째");
for (int i = 0; i < list.size(); i++)
{
stringBuilder.append(list.get(i));
}
System.out.println(stringBuilder);
}
}
// >> 첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째
'Java > Java' 카테고리의 다른 글
[Java]문자열 함수 substr(), substring(), slice() (0) | 2022.11.20 |
---|---|
[Java] 삼항 연산자 (0) | 2022.11.20 |
[Java] Stream이란 ? (0) | 2022.11.20 |
항해99 - Java 스터디 과제 (0) | 2022.11.18 |
[Java]StringTokenizer 문자열 분리하기 (0) | 2022.11.11 |
댓글