[프로그래밍 3주차] 키오스크 과제 Level 2~4 / TIL day 15

하리비·2025년 3월 11일
0

📝 TIL

목록 보기
6/11
post-thumbnail

📋 필수 요구사항


  • Lv 1. 기본적인 키오스크를 프로그래밍해보자
  • Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기
  • Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
  • Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기
  • Lv 5. 캡슐화 적용하기

이번 과제에서 신경쓸 부분🥲
저번 과제 이후 클래스간의 역할을 정리하고 분리하는 작업이 얼마나 중요한지를 깨달았다.
각 레벨을 구현하기 전에는 항상 클래스의 역할을 정리하고 시작하기로 했다 !
요구 사항을 잘 읽고 잘 지키자..



📝 나의 코드 리뷰하기


🌟 [ Level2 ]

📍 요구사항

  • MenuItem
    • 클래스 생성 후 속성 입력
  • Main
    • MenuItem을 통해 객체 생성 / 이름, 가격, 설명을 세팅
    • Array list로 아이템들을 추가
    		Main (메뉴의 객체 생성)
    		 ├── MenuItem (메뉴 속성 등록)

📍 주요 코드

public class MenuItem  {

//    속성
    String name;
    double price;
    String detail;

//    생성자
    public MenuItem(String name, double price, String detail) {
        this.name = name;
        this.price = price;
        this.detail = detail;  
        
 // 개별 속성을 가져올 getter 메서드들
 ...

    }
}      

-------------------------------------

public class Main {
    public static void main(String[] args) {
        ...
        
        List<Menuitem> menuitems = new ArrayList<>();

        menuitems.add (new Menuitem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuitems.add (new Menuitem("SmokeBurger", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        menuitems.add (new Menuitem("CheeseBurger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
        menuitems.add (new Menuitem("HamBurger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));


        for (Menuitem item : menuitems) {
            System.out.println( item.getName() + " | " + item.getPrice() + " | " + item.getDetail());
        }
        
        System.out.print("메뉴를 선택하세요 : ");
        int num = scanner.nextInt();

        // switch문으로 입력한 번호에 따라 선택한 버거 보여주기
        ...

💡 어려웠던 점

  • 객체를 생성하고 List에 담아야 할때, 저렇게 객체 생성과 동시에 하는게 깔끔한듯 하다
  • List의 데이터를 탐색할 때는 향상된 for문 을 사용하는 것 잊지말자..^^


🌟 [ Level3 ]

📍 요구사항

  • Kiosk
    • 클래스 생성하기
    • start 함수로 입력,반복문 로직 만들기 (메인에서 하지말고)
      - 0 을 입력하면 뒤로가기되거나 종료
    • menuitem을 관리하는 리스트가 존재한다
    • List는 kiosk의 생성자를 이용하기
    		Main 
     	   ├── Kiosk (시작-반복 로직, 객체 관리하기)
    		     ├── MenuItem (객체 등록하기)

주요코드

public class Main {
    public static void main(String[] args) {
        Kiosk kiosk = new Kiosk ();
        kiosk.start();
    }
}
----------------------------------------------

public class Kiosk {
    Scanner scanner = new Scanner(System.in);
    List<Menuitem> menuitem = new ArrayList<>();

    void wholeMenu () {
        menuitem.add(new Menuitem("ShackBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuitem.add(new Menuitem("SmokeBurger", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        menuitem.add(new Menuitem("CheeseBurger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
        menuitem.add(new Menuitem("HamBurger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));
    }

    void start () {
        System.out.println("키오스크를 시작하려면 아무거나 입력하세요");
        scanner.nextLine();
        System.out.println("키오스크를 시작합니다");
        wholeMenu();

        for (Menuitem item : menuitem) {
            System.out.println(item.getName() + " | " + item.getPrice() + " | " + item.getDetail());
        }
        System.out.print("종료는 0 | ");
        System.out.print("메뉴를 선택하세요 : ");
        int num = scanner.nextInt();

        // 기존 main에서 쓰던 switch문 옮겨오기
        ...
        }
    }
}

💡 어려웠던 점

  • main이 깔끔하다 못해 휑해졌다(ㅋㅋ)
  • 키오스크로 객체,리스트를 옮겨와야 하는데 시작점이 아니라 그런지 바로 List에 넣을 수 없었다.
    그래서 그냥 냅다 메서드로 만들어 버리고 start함수 실행시 메뉴를 쭉 불러오는 것으로 변경,,,
  • switch 문에서 예외처리 다시 하기
  • 카테고리가 추가되면 어쩌지..?

🌟 [ Level4 ]

📍 요구사항

  • Menu
    • 클래스 생성 후 list 옮기기
    • Menuitem을 관리한다
    • (상위개념-"버거"같은) 카테고리 이름 필드를 만들자
    • 카테고리 이름을 반환하는 메서드가 구현되어야 한다
        Main 
     	   ├── Kiosk (입력,실행)
              ├── Menu (객체 등록하기)
    		          ├── MenuItem (객체 등록하기)

📍 주요 코드

  • 일단 카테고리를 나눠야 하기 때문에 카테고리 별 리스트를 새로 선언했다
  • 출력은 Kiosk에서 하고 리스트 관리는 Menu에서 하기 때문에 접근할 수 있도록 getter를 추가했다
  • 이제 카테고리 선택 후에!! 출력을 해야하기 때문에 MenuItem의 getter와 List의 index을 활용해서
    메뉴 출력 방식도 변경했다 (그러나 카테고리 출력은 아직도 수기 느낌,,ㅎ)

💡 어려웠던 점

  • 처음에 kiosk에 생성했던 객체를 왜인지 menuitem으로 옮겨야 한다고 생각했다 (요구사항 다 까먹은듯)
    아무튼 그래서 이상한데 사로잡혀 몇시간을 고민하다가,, 튜터님께 갔고 피드백 후에 생각을 고쳐먹을 수 ? 있었다 ^^
  • 아직까지 요구사항이 전부 구현된지 모르겠다 뭘 모르는데 뭘 모르는지 모르는 이 기분,,
  • 아직까지 코드가 지저분한 느낌이다. kiosk에 출력방식도 뿌듯하게 캡쳐해뒀는데 지금보니 맘에 안들고, list에 추가는 왜 저렇게 했으며... 카테고리 메뉴는 아직도 sout으로만 출력하고 있다..!

🥹 나의 회고


난 글렀다..... 뭘 모르는지 몰라서 질문도 못한다 코드가 뒤죽박죽 동물원이다...

0개의 댓글