-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
StringBuilder를 왜 쓸까?
Java 코딩테스트에서 StringBuilder는 굉장히 많이 쓰입니다.
그 이유는 한마디로:
문자열을 여러 번 이어 붙일 때, +보다 훨씬 빠르기 때문입니다.
+를 쓰면 느린 이유
String s = "a";
s += "b"; // 실제로는 "ab"라는 새로운 문자열이 생성됨!+연산을 많이 하면 매번 새 문자열을 만들기 때문에 느려요.- 특히 큰 루프에서 문자열을 누적하면 시간 초과 가능성이 있습니다.
StringBuilder는 가변
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
System.out.println(sb.toString()); // ab- 내부에서 한 개의 문자열 버퍼에 계속 붙이기 때문에 효율적
- 문자열 누적 시 시간복잡도 O(1) 수준
예시 - 옷 정보 출력
<문제 설명>
다음 옷 정보를 출력하시오.
[clothing1 - 옷 정보]
아이디: 2024
이름: Oversized Hoodie
브랜드: UNIQLUX
카테고리: Outerwear
가격: 49900원
자바 코드 예제
class Clothing {
int id;
String name;
String brand;
String category;
int price;
public Clothing(int id, String name, String brand, String category, int price) {
this.id = id;
this.name = name;
this.brand = brand;
this.category = category;
this.price = price;
}
}
public class ClothingTest {
public static void main(String[] args) {
Clothing clothing1 = new Clothing(2024, "Oversized Hoodie", "UNIQLUX", "Outerwear", 49900);
StringBuilder builder = new StringBuilder("[clothing1 - 옷 정보]\n");
builder.append(String.format("아이디: %d\n", clothing1.id))
.append(String.format("이름: %s\n", clothing1.name))
.append(String.format("브랜드: %s\n", clothing1.brand))
.append(String.format("카테고리: %s\n", clothing1.category))
.append(String.format("가격: %d원\n", clothing1.price));
System.out.println(builder);
}
}만약에 StringBuilder를 안썼다면?
public class ClothingTest {
public static void main(String[] args) {
Clothing clothing1 = new Clothing(2024, "Oversized Hoodie", "UNIQLUX", "Outerwear", 49900);
String result = "[clothing1 - 옷 정보]\n"
+ String.format("아이디: %d\n", clothing1.id)
+ String.format("이름: %s\n", clothing1.name)
+ String.format("브랜드: %s\n", clothing1.brand)
+ String.format("카테고리: %s\n", clothing1.category)
+ String.format("가격: %d원\n", clothing1.price);
System.out.println(result);
}
}[Java] StringBuilder.append()엔 뭘 넣을 수 있을까?
StringBuilder는 문자열을 조립하는 만능 작업대입니다.
문자(char) 한 알이든, 문자열(String) 덩어리든 가리지 않고 다 붙여줍니다.
1. 팩트: 다 들어갑니다 (오버로딩)
Java 내부적으로 append() 메서드가 수십 개 준비(Overloading)되어 있어서 가능한 일입니다.
StringBuilder sb = new StringBuilder();
char c = 'A';
String str = "pples";
int num = 10;
sb.append(c); // 문자(char) 쌓기 가능
sb.append(str); // 문자열(String) 쌓기 가능
sb.append(num); // 심지어 숫자(int)도 바로 들어감!
System.out.println(sb.toString());
// 결과: "Apples10"2. 꿀팁: 메서드 체이닝 (줄줄이 소세지)
append()는 작업을 마치고 **자기 자신(StringBuilder 객체)**을 반환합니다.
그래서 아래처럼 한 줄로 계속 이어서 쓸 수 있습니다. 코테에서 아주 유용합니다.
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(' ').append("World").append(2024);
// 결과: "Hello World2024"3. 내부 원리 (살짝 깊게)
겉으로는 String 덩어리를 받는 것처럼 보이지만,
**내부적으로는 거대한 char[] (문자 배열)**을 가지고 있습니다.
"Hello"를 넣으면? 👉 내부 배열에['H', 'e', 'l', 'l', 'o']를 복사해서 넣음.'A'를 넣으면? 👉 그 뒤에['A']를 넣음.
즉, **"넣는 건 자유, 저장은 문자 배열 형태"**로 한다고 이해하면 정확합니다.
⚡ 3줄 요약
sb.append('a')(문자) ⭕sb.append("abc")(문자열) ⭕- 고민하지 말고 붙이고 싶은 건 다 집어넣으면 알아서 문자열로 만들어줌.
Reactions are currently unavailable
