일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이드 유닛 테스트 예시
- 서비스 쓰레드 차이
- 클래스
- rxjava cold observable
- android ar 개발
- 안드로이드 os 구조
- 스택 큐 차이
- 큐 자바 코드
- android retrofit login
- ar vr 차이
- jvm 작동 원리
- 서비스 vs 쓰레드
- 안드로이드 레트로핏 사용법
- 안드로이드 유닛테스트란
- 안드로이드 라이선스 종류
- 2022 플러터 안드로이드 스튜디오
- jvm이란
- Rxjava Observable
- 2022 플러터 설치
- rxjava hot observable
- rxjava disposable
- ANR이란
- 안드로이드 라이선스
- 안드로이드 유닛 테스트
- 자바 다형성
- 안드로이드 레트로핏 crud
- 플러터 설치 2022
- 객체
- 스택 자바 코드
- 멤버변수
- Today
- Total
나만을 위한 블로그
[JAVA] StringBuilder란? StringBuilder 사용법 본문
자바에서 문자열하면 String을 대개 많이 떠올리고 사용할 것이다.
그런데 이 문자열이 1개 이상 있어서 이것들을 더해야(합쳐야) 한다고 하면 어떤 방법을 쓸 수 있을까?
간단하게는 이 방법을 쓸 수 있을 것이다.
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 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데, 덧셈 연산이 많아진다면 성능적으로 좋지 않다.
관련 내용은 아래 링크에 설명되어 있다.
www.codejava.net/java-core/the-java-language/why-use-stringbuffer-and-stringbuilder-in-java
많은 문자열을 연결하면 많은 중간 문자열 객체가 생성되어 비효율적인 코드가 생성된다
왜 이런 말을 하는 것일까?
자바에서 String 객체는 변경 불가능하다. 한 번 생성되면 내용을 바꿀 수 없단 뜻이다. 따라서 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지 컬렉터로 들어간다.
100만 개의 문자열을 연결해야 하는 상황이 왔다고 가정하자. 그리고 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 변수에 넣을 때도 마찬가지다.
위의 예시는 일부러 결과값을 적지 않았다. 어떤 식으로 결과가 출력될지 생각해보고 직접 확인해보자.
반복문에서 StringBuilder를 사용한다면 아래와 같이 사용할 수 있다.
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] 문자열의 마지막 문자를 제거하는 방법 (0) | 2021.06.09 |
---|---|
[JAVA] Iterator란? Iterator를 사용하는 이유와 사용법 (0) | 2021.05.11 |
[JAVA] 추상 클래스 vs 인터페이스 (0) | 2021.03.14 |
[JAVA] 문자열 변환하는 방법 / 특정 문자열을 검색하는 방법 (0) | 2021.02.15 |
[JAVA] 상속이란? 오버라이딩이란? (0) | 2020.12.19 |