StringBuilder는 Java에서 문자열을 조작할 때 유용한 클래스이다. 특히, 문자열을 자주 변경해야 하는 경우StringBuilder를 사용하면 성능상의 이점을 얻을 수 있다.
💡 String을 사용하여 문자열을 변경하면, 변경 시 마다 새로운 객체를 사용하게 되므로 메모리 사용량이 많아진다!
| String | 불변 | 문자열 변경 시 새로운 객체 생성 | 메모리 사용 多 |
|---|---|---|---|
| StringBuilder | 가변 | 문자열 변경 시 동일한 객체 재사용 | 메모리 사용 少 |
StringBuilder sb = new StringBuilder(); // 객체 선언
StringBuilder sb = new StringBuilder("aaa"); // 문자열을 바로 넣을 수도 있음!
.append() : 문자열 추가.replace() : 지정된 시작 인덱스부터 끝 인덱스 - 1까지의 부분 문자열을 주어진 문자열로 대체.subString : 파라미터가 하나라면 해당 인덱스부터 끝까지, 두개라면 시작점과 끝점-1 까지 추출.setCharAt() : index 위치의 문자를 s로 변경.toString() : String으로 변환 (sb.toString()).reverse() : 해당 문자 전체를 뒤집는다 (sb.reverse())public abstract class Pizza {
protected List<String> toppings = new ArrayList<>();
protected String name;
protected String dough;
protected String sauce;
public void prepare() {
System.out.println("Preparing " + name);
}
public void bake() {
System.out.println("Baking " + name);
}
public void cut() {
System.out.println("Cutting " + name);
}
public void box() {
System.out.println("Boxing " + name);
}
@Override
public String toString() {
StringBuilder display = new StringBuilder();
display.append("----" + name + "----\n");
display.append(dough + "\n");
display.append(sauce + "\n");
for (int i = 0; i < toppings.size(); i++) {
display.append(toppings.get(i) + "\n");
}
return display.toString();
}
}
toString메서드는 Java에서 객체를 문자열로 표현할 때 호출되는 메서드이다.
기본적으로Object클래스에 정의되어 있으며, 이 메서드를 재정의하여 객체의 상태를 의미 있는 문자열로 반환해 줌.
→ 사용 시 Override 하게 됨
public abstract class Pizza {
protected List<String> toppings = new ArrayList<>();
protected String name;
protected String dough;
protected String sauce;
public void prepare() {
System.out.println("Preparing " + name);
}
public void bake() {
System.out.println("Baking " + name);
}
public void cut() {
System.out.println("Cutting " + name);
}
public void box() {
System.out.println("Boxing " + name);
}
@Override
public String toString() {
StringBuilder display = new StringBuilder();
display.append("----" + name + "----\n");
display.append(dough + "\n");
display.append(sauce + "\n");
for (int i = 0; i < toppings.size(); i++) {
display.append(toppings.get(i) + "\n");
}
return display.toString();
}
}
위
Pizza클래스에서toString메서드를 재정의했기 때문에,이 객체를 문자열로 표현해야 하는 상황 ex) sout 시 자동으로toString메서드가 호출된다.
하지만
toString메서드는 객체를 만들기만 해서 자동으로 호출되지 않고, 해당 객체를 출력하거나 문자열로 변환할 때 명시적으로 호출 하게 됨!
SimpleFactory 중 예시 일부
public static void main(String[] args) {
SimplePizzaFactory factory = new SimplePizzaFactory();
PizzaStore store = new PizzaStore(factory);
Pizza pizza1 = store.orderPizza("cheese");
System.out.println("조엘의 주문 " + pizza1);
Pizza pizza2 = store.orderPizza("greek");
System.out.println("무라카미의 주문 " + pizza2);
Pizza pizza3 = store.orderPizza("clam");
System.out.println("하루키의 주문 " + pizza3);
}
결과 코드
조엘의 주문 ----Cheese Pizza----
Regular Crust
Marinara Pizza Sauce
Fresh Mozzarella
Parmesan
무라카미의 주문 ----Greek Pizza----
Oily Crust
Tomato Sauce
Feta Cheese
Onion
Olive
하루키의 주문 ----Clam Pizza----
Thin Crust
White garlic sauce
Clams
Grated parmesan cheese
💡 Pizza 클래스에서 toString()으로 재정의한 뒤, 피자 객체를 출력하게 됨