메뉴를 출력해주는 기능
요구사항 출력 예시
입력값 : 필요한 값인 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)