[내배캠 14일차] 키오스크 발제, 필수 단계(Lv1~5)와 도전단계 Lv1구조짜기

말하는 감자·2025년 3월 7일

내일배움캠프

목록 보기
14/73

설계단계

저번 계산기 과제에서는 필수단계의 낮은 레벨부터 너무많은 심혈(..)을 기울였다.
안좋은건 아니지만 더 기능적으로 잘 할 수 있었는데, 내부적인 고민이 많아서 전체적으로 과제 진도 나가는 속도가 빠르다고 말을 못했다.

그래서 이번 키오스크때는 필수적으로 요구되는 사항들을 구현하는 것을 우선으로 전부 다 하고나서 마지막 레벨에서 예외처리라던지... 함수쪼개기라던지...
이런걸 해 볼 생각이다.

📌꼭 기억하기

  • 한 단계에서 모든 것을 하려고 하지말자
    - 레벨을 높이면서 리팩토링을 하는 것이 주 목적이다.
  • 요구사항 꼼꼼하게 살피기
    - 궁금한 것이 있으면 튜터님께 꼭 확인받으러가기
  • 지피티 사용하지 않기
    - 튜터님께 물으러가기 애매한 것들을 사실 지피티로 도움받긴했다. 하지말고 질문하는 연습을 많이 해보자

필수과제

Lv 1. 기본적인 키오스크를 프로그래밍해보자

  • 요구사항이 가지는 의도
    • 입력 처리와 간단한 흐름 제어를 복습합니다. (프로그래밍 검증)
    • Scanner 활용법, 조건문, 반복문을 재확인하며 입력 데이터를 처리하는 방법 강화
  • 햄버거 메뉴 출력 및 선택하기
    • 실행시 햄버거 메뉴가 표시되고, 이후 Scanner로 숫자를 입력받아서 메뉴를 선택할 수 있다.
    • 제시된 메뉴 중 입력받은 숫자에 따라 다른 로직을 실행하는 코드를 작성합니다.
    • 반복문을 이용해서 특정 번호가 입력되면 프로그램을 종료합니다.

1단계의 경우는 계산기 과제 복습의 의도가 보여서 기본적인 기능을 구현했다.
사용자 클래스는 따로 정의하지않았고, main함수 바깥에서 선언되는 함수도없었다.
그렇다보니 UML이나 클래스 구조를 그림으로 그릴 필요없이 바로 진행했다.

단품/세트 가격고지는 이제 들어온값을 스



Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기

  • 요구사항이 가지는 의도
    • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힙니다.
    • 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리합니다.

  • MenuItem 클래스 생성하기
    • 설명 : 개별 음식 항목을 관리하는 클래스입니다. 현재는 햄버거만 관리합니다.
    • 클래스는 이름, 가격, 설명 필드를 갖습니다.
  • main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력합니다.
    • MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.
      • 키워드: new
    • List를 선언하여 여러 MenuItem을 추가합니다.
      • List<MenuItem> menuItems = new ArrayList<>();
    • 반복문을 활용해 menuItems를 탐색하면서 하나씩 접근합니다.

요구 사항에 맞게 구현 전에 미리 눈으로 보기 쉽게 구조를 만들어놨다. (이번에는정말 열심히 하는 것 같다 ㅋㅋㅋ)
MenuItem 클래스에는 이름, 단품가격, 세트가격, 설명 필드를 갖고 모두 private으로 선언해서 getter, setter준비해줬다.

1단계와 큰 차이점은없고 아주 작게 단품, 세트가격 고지가 추가됐다.
리팩토링이 결국엔 사용자눈에는 바뀐것이 없지만 프로그래밍적인 수정이 들어가는 것이니.. ㅎ



Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기

  • 요구사항이 가지는 의도
    • 객체 지향 개념을 학습하고, 데이터를 구조적으로 관리하며 프로그램을 설계하는 방법을 익힙니다.
    • main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리합니다.
  • Kiosk 클래스 생성하기
    • 설명: 키오스크 프로그램의 메뉴를 관리하고 사용자 입력을 처리하는 클래스입니다.
    • MenuItem을 관리하는 리스트가 필드로 존재합니다.
    • main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리합니다.
    • List<MenuItem> menuItemsKiosk 클래스 생성자를 통해 값을 할당합니다.
      • Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줍니다.
  • 요구사항에 부합하는지 검토
    • 키오스크 프로그램을 시작하는 메서드가 구현되어야 합니다.
      • 콘솔에 햄버거 메뉴를 출력합니다.
      • 사용자의 입력을 받아 메뉴를 선택하거나 프로그램을 종료합니다.
      • 유효하지 않은 입력에 대해 오류 메시지를 출력합니다.
      • 0을 입력하면 프로그램이 ‘뒤로가기’되거나 ‘종료’됩니다.

3단계는 이런식으로 생겼다.
main함수에서 키오스크 객체와 List<MenuItem>을 만들어주고, 키오스크 생성자에 해당 리스트를 넘기고 키오스크 시작 함수를 하면서 메인함수의 역할은 끝이난다.
이제부터 메인함수의 역할은 크게 없어질 것이다.
인스턴스 생성과 키오스트 시작! 으로 끝낼것이기 때문ㅇ ㅇㅇ

정말 갑 ㅅ넣어주고 시작~~ 하고 긑난다 메인함수늖ㅎㅎ

레벨 2와 별다른 기능적인 차이는 없다.



Lv 4. 객체 지향 설계를 적용해 음식 메뉴와 주문 내역을 클래스 기반으로 관리하기

  • Menu 클래스 생성하기
    • 설명 : MenuItem 클래스를 관리하는 클래스입니다.
      예를 들어, 버거 메뉴, 음료 메뉴 등 각 카테고리 내에 여러 MenuItem을 포함합니다.
    • List<MenuItem>Kiosk 클래스가 관리하기에 적절하지 않으므로 Menu 클래스가 관리하도록 변경합니다.
    • 여러 버거들을 포함하는 상위 개념 ‘버거’ 같은 카테고리 이름 필드를 갖습니다.
    • 메뉴 카테고리 이름을 반환하는 메서드가 구현되어야 합니다.

Lv 5. 캡슐화 적용하기

  • MenuItem, Menu 그리고 Kiosk 클래스의 필드에 직접 접근하지 못하도록 설정합니다.
  • Getter와 Setter 메서드를 사용해 데이터를 관리합니다.

음... 4/5단계 분리에서 ㅋㅋㅋㅋㅋ사실 4단계 만들 때 당연하게 클래스 내부변수는 private해주고 게터와 세터를 만들어줬는데 이게 5단계 를 동시에 만족해버렸다.!!
메뉴 카테고리 이름을 반환하는 메서드같은 경우는 menu에 카테고리 이름과 카테고리 번호를 저장하는 변수가 있다.
그래서 그 이름을 게터함수 만들면서 자동적으로 생겼다..ㅎㅎ

이제 메인함수에서 선언하는 것들이 좀 많아졌다.
초기값을 넣다보니 많아진 것 같은데,
각각의 Menu객체들이 ㅈ주어진 카테고리에 맞는 List<MenuItem>을 하나씩 들고 Menu리스트에 포함이 된다.
이 Menu리스트들이 키오스크 클래스의 생성자로 들어가는 형식이다.

기존의 List<MenuItem>에서 좀더 구조가 들어간 박스가 생긴 느낌??
참고로 카테고리에 맞는 메뉴 보여주는 함수도 Menu에 넣었다. 굿


전체적으로 계산기과제보다 후다닥 지나간 느낌이기도 하고, 계산기 과제를 겪었기 때문에 아주 필수적인 예외처리도 빨리빨리끝낼 수 있었다.
역시 사람은 경험이 있고 봐야해 ㅋㅋ



도전과제

Lv 1. 장바구니 및 구매하기 기능을 추가하기

  • 요구사항이 가지는 의도
    • 의도: 클래스 간 연계를 통해 객체 지향 프로그래밍의 기본적인 설계를 익히고, 사용자 입력에 따른 프로그램 흐름 제어와 상태 관리를 학습
    • 목표
      • 클래스 간 역할 분리를 이해하고, 적절히 협력하는 객체를 설계
      • 프로그램 상태 변경 및 데이터 저장을 연습
      • 사용자 입력에 따른 예외 처리와 조건 분기를 연습

기존의 5단계에서 사용자마다 다르게 사용할 장바구니가 필요하니 메인함수에서 장바구니 인스턴스를 만들어줘야겠구나 라는 생각을 먼저했다.
그래서 MenuItem과 비슷한 형식의 장바구니를 만들어주고,
장바구니도 안에 List<MenuItem>을 가지게 될 것이다.
계산기 결과 저장한 리스트 처럼 수정, 삭제, 추가가 기본적으로 해당 클래스에 들어가게 될거고!! ㅎㅎ

키오스크에서는 이제 리스트가 비었는지 확인하면서 추가 출력 여부를 추가하고, 출력하는 함수도 만들어주면 되겠지??

오늘은 이정도로 했다.
다음주에도 내가 어디까지 했는지 까먹지 말고 잘 이어나갔으면 좋겠다..^^

profile
대충 데굴데굴 굴러가는 개발?자

0개의 댓글