String 관련 문법

하루키·2024년 8월 6일
post-thumbnail

📖 StringBuilder

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() 문법

toString 메서드는 Java에서 객체를 문자열로 표현할 때 호출되는 메서드이다.
기본적으로 Object 클래스에 정의되어 있으며, 이 메서드를 재정의하여 객체의 상태를 의미 있는 문자열로 반환해 줌.
→ 사용 시 Override 하게 됨


📃 예제 코드

  • toString 문법 예시 코드 (Simple Factory 中)
    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()으로 재정의한 뒤, 피자 객체를 출력하게 됨

profile
코딩 못하는 개발자(진)

0개의 댓글