• 메뉴를 출력해주는 기능

  • 요구사항 출력 예시

    Untitled

  • 입력값 : 필요한 값인 products는 Menu클래스 내의 필드이므로 입력값 필요없음

  • 반환값 : 단순출력기능이므로 반환값 없음

  • 접근 범위 : OrderApp의 start()메서드에서 호출해야하므로 public

  • 수도코드

    public void printMenu(){
    	System.out.println("[🔻] 메뉴");
    	System.out.println("-".repeat(60));
    
    	System.out.println("🍔 햄버거");
    	//여기에서 햄버거 출력(instanceof 연산자 사용)
    	System.out.println();
    
    	System.out.println("🍟 사이드");
    	//여기에서 사이드 출력(instanceof 연산자 사용)
    	System.out.println();
    
    	System.out.println("🥤 음료");
    	//여기에서 음료 출력(instanceof 연산자 사용)
    	System.out.println();
    
    	System.out.println();
    	System.out.println("🧺 (0) 장바구니");
    	System.out.println("📦 (+) 주문하기");
    	System.out.println("-".repeat(60));
    	System.out.print("[📣] 메뉴를 선택해주세요 : ");
        }
    
  • instanceof 연산자를 통해 카테고리별로 나눌 수 있다

    ( A instanceof B : A is B (IS-A관계)가 성립되면 true, 성립되지않으면 false)

    //각 카테고리를 추가할 곳에 다음과 같이 코드를 작성할 수 있다
    for (Product product : products){
    	if (product instanceof Hamburger){
    		System.out.printf("(%d) %s &5dKcal %5d원\\n",product.getId(),product.getName(),product.getKcal(),product.getprice()));
    	}
    	else if (product instanceof Side){
    		System.out.printf("(%d) %s &5dKcal %5d원\\n",product.getId(),product.getName(),product.getKcal(),product.getprice()));
    	}
    	else if (product instanceof Drink){
    		System.out.printf("(%d) %s &5dKcal %5d원\\n",product.getId(),product.getName(),product.getKcal(),product.getprice()));
    	}
    }
    
  • 코드의 길이를 줄이고, 중복을 제거하기 위해 메서드 추출 기능을 활용해 리팩토링한다(단축키 cmd+option+M)