일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- lol
- 자바
- 롤
- 백준
- 코딩테스트
- 코딩테스트준비
- sort
- 라이엇
- 알고리즘
- java
- 스파르타내일배움캠프
- 그리디
- github
- greedy
- programmers
- 스파르타내일배움캠프TIL
- 내일배움캠프
- 프로그래머스
- git
- SQL
- 그리디알고리즘
- Riot
- drf
- 탐욕알고리즘
- Django
- 리그오브레전드
- 장고
- API
- python
- Today
- Total
Lina's Toolbox
[Java] StringBuilder를 사용하는 이유 본문
public String solution(String number, int k) {
Stack<Character> stack = new Stack<>();
for (char digit : number.toCharArray()) {
while (!stack.isEmpty() && k > 0 && stack.peek() < digit) {
stack.pop();
k--;
}
stack.push(digit);
}
while (k > 0) {
stack.pop();
k--;
}
StringBuilder result = new StringBuilder();
for (Character ch : stack) {
result.append(ch);
}
return result.toString();
}
왜 result를 String형으로 선언하지 않고, StringBuilder라는 걸 사용했을까요?
StringBuilder를 사용하는 이유는 문자열(String)을 효율적으로 조작하기 위해서입니다.
자바에서 String과 StringBuilder는 메모리 및 성능 측면에서 큰 차이가 있습니다.
1. String의 불변성(Immutable)
자바에서 String은 불변 객체(immutable object)입니다.
즉, 한 번 생성된 String 객체는 그 값을 변경할 수 없습니다.
만약 String에 무언가를 추가하거나 변경하려고 하면, 새로운 문자열 객체가 생성됩니다.
예를 들어,
String result = "";
result += "a"; // 새로운 String 객체 생성
result += "b"; // 또 다른 새로운 String 객체 생성
위 코드는 각 단계에서 새로운 String 객체를 생성합니다.
기존의 result에 문자를 추가할 때마다 새로운 객체가 만들어지고,
이전 문자열에 새로운 문자를 덧붙인 값을 가진 새로운 객체로 할당되죠. 이 과정은 메모리와 성능 측면에서 비효율적입니다.
2. StringBuilder의 가변성(Mutable)
반면에, StringBuilder는 가변 객체입니다.
즉, 한 번 생성된 StringBuilder 객체는 그 값을 변경할 수 있습니다.
새로운 문자열을 추가하더라도 새로운 객체를 생성하지 않고, 기존 객체 내에서 값을 변경합니다.
예를 들어,
StringBuilder result = new StringBuilder();
result.append("a"); // StringBuilder 내부 버퍼에 'a' 추가
result.append("b"); // StringBuilder 내부 버퍼에 'b' 추가
위 코드는 같은 StringBuilder 객체를 사용하여 append 메서드로 값을 계속 추가할 수 있습니다.
즉, 새로운 객체를 생성하지 않으므로 메모리 효율성이 높아집니다.
일반적으로 문자열을 반복해서 더하는 작업을 할 때, StringBuilder는 String보다 훨씬 더 빠릅니다.
String을 반복해서 더하면 매번 새로운 객체를 생성하기 때문에 성능이 저하되지만,
StringBuilder는 기존 객체를 계속 사용하므로 성능이 좋아집니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 특정 기준으로 정렬하는 법 (Comparator인터페이스 사용) / 제네릭 타입 (0) | 2024.10.02 |
---|