TIL 14 [ 키오스크 과제(1~2단계) ]

2025. 3. 7. 17:57·[내일배움캠프-Sparta]/Spring 6기
반응형

1. 학습내용

10:00 ~ 11:00 키오스크 과제 발제 ( 박성규 튜터님 )

★ 키오스크 과제 1단계 ★

Lv 1. 기본적인 키오스크를 프로그래밍하기
package com.example.kiosk;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Lv 1. 기본적인 키오스크를 프로그래밍해보자
        Scanner sc = new Scanner(System.in);

        // 무한 반복
        while(true) {
            // 메뉴판 출력
            System.out.println("[ SHAKESHACK MENU ]");
            System.out.println("1. ShackBurger   | 6900원 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거");
            System.out.println("2. SmokeShack    | 8900원 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
            System.out.println("3. Cheeseburger  | 6900원 | 포테이토 번과 비브패티, 치즈가 토핑된 치즈버거");
            System.out.println("4. Hamburger     | 5400원 | 비프패티를 기반으로 야채가 들어간 기본버거");
            System.out.println("0. 종료      | 종료");

            // 입력 받기 ( 선택하기 )
            int choose = sc.nextInt();
            if(choose == 0) { // 0을 입력시 프로그램이 종료됨.
                System.out.println("프로그램을 종료합니다.");
                break;
            } else if (choose == 1) {
                System.out.println(" ShackBurger를 선택하였습니다. ");
                break;
            } else if (choose == 2) {
                System.out.println(" SmokeShack을 선택하였습니다. ");
                break;
            } else if (choose == 3) {
                System.out.println(" Cheeseburger를 선택하였습니다. ");
                break;
            } else if (choose == 4){
                System.out.println(" Hamburger를 선택하였습니다. ");
                break;
            } else { // 그 외의 값을 입력시 "잘못된 선택 입니다" 메세지 출력.
                System.out.println(" 잘못된 선택입니다. ");
            }
        }
    }
}

Main 클래스

[트러블 슈팅]

  • 1단계 에서는 부담없이 잘 진행되었다.
  • 특정 번호가 입력된다는 가정에 의해, 프로그램이 종료되게 설계하였다.

★ 키오스크 과제 2단계 ★

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

 

package com.example.kiosk;

public class MenuItem {
    // 속성
    String name;
    int price;
    String explain;

    // 생성자
    public MenuItem(String name, int price, String explain) {
        this.name = name;
        this.price = price;
        this.explain = explain;
    }
}

MenuItem 클래스

package com.example.kiosk;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기
        // List 컬렉션 선언
        List<MenuItem> menuItems = new ArrayList<>();

        // add함수로 new MenuItem(이름,가격,설명) List에 삽입
        menuItems.add(new MenuItem("ShackBurger", 6900 ,"토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("SmokeShack", 8900 ,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Cheeseburger", 6900 ,"포테이토 번과 비브패티, 치즈가 토핑된 치즈버거"));
        menuItems.add(new MenuItem("Hamburger", 5400 ,"비프패티를 기반으로 야채가 들어간 기본버거"));

        Scanner sc = new Scanner(System.in);

        while(true) {
            System.out.println("[ SHAKESHACK MENU ]");
            for(int i=0; i<menuItems.size(); i++) {
                MenuItem item = menuItems.get(i); // 한 객체의 값을 직접 집어넣어주어야 하는데 캡슐화 하면 ?..
                System.out.println(i+1 + ". " + item.name + " | " + item.price + "원 | " + item.explain);
            }
            System.out.println("0. 종료      | 종료");

            int choose = sc.nextInt();
            if(choose == 0) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else if (choose >= 1 && choose <= 4) {
                MenuItem item = menuItems.get(choose - 1); // 인덱스는 0부터 시작하기 때문에 -1을 해야함.
                System.out.println(item.name + "를 선택하였습니다.");
                break;
            } else {
                System.out.println(" 잘못된 선택입니다. ");
            }
        }
    }
}

Main 클래스

[트러블 슈팅]

  • 배경 : menuItems으로 메뉴를 저장하였더니 출력하니 객체 주소값이 출력되는 현상 발견.
  • 발단 : 반복문을 통해서 그대로 menuitems.get(i) 로 출력을 하면 주소값이 나온다는 값을 인지했다. 그래서 다른 방법으로 어떻게 주소값이 안나오고, 원하는 값이 나올지 방법을 찾아보았다.
  • 전개 :  해결하던 와중에 MenuItem 타입으로 지역변수를 다시 주는 방법은 어떨까 라는 생각에 반복분 내에서 menuItem.get(i)로 각각 객체들을 지역변수에 담아서 그 지역변수가 객체.필드명 을 사용할수 있는지 시도 해보았다.
  • 위기 : 나중에 캡슐화가 진행될때 필드명으로 선언되면 사용할수 가 없는 문제점이 있을거라는 미래를 예측했다. 그래서 튜터님 한테 찾아가 이 상황에 대해서 설명을 하였다.
  • 절정 : 캡슐화가 되면 해당 되는 부분은 사용이 안되는것이 맞다고 하였으며, 클래스 내에서 showInfo() 함수로 담아서 출력하는 방법이라던지 toString으로 오버라이딩 하는 방법을 한다던지 여러 방법을 제공 해주셨다.
  • 결말 : 객체 주소값이 출력되지 않게 해결 할수 있었고, 추후 캡슐화가 된다면 추후 위의 방법대로 진행해보아야 겠다.


2. 내일 학습 할 것: 주말동안 CS지식 정리 , 백준 알고리즘, 키오스크 과제 github정리

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]  (0) 2025.03.11
TIL 15 [ 키오스크 과제(3~4단계) ]  (0) 2025.03.10
TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ]  (0) 2025.03.06
TIL 12 [계산기 과제 3단계(enum, 제네릭, 람다, 스트림)]  (0) 2025.03.05
TIL 11 [Java(접근제어자, 클래스란?, 객체지향?) + 계산기 과제 2단계 ]  (0) 2025.03.04
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 16 [ 키오스크 과제 5단계 , Java (Enum, 동일성 vs 동등성) ]
  • TIL 15 [ 키오스크 과제(3~4단계) ]
  • TIL 13 [ Java(동일성 문제, 클래스와 객체, charAt함수) ]
  • TIL 12 [계산기 과제 3단계(enum, 제네릭, 람다, 스트림)]
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    컴퓨터구조
    Til
    AWS
    Java
    CPU
    알고리즘
    트랜잭션
    Python
    SQLD
    cs
    network
    네트워크
    docker
    백엔드
    웹
    OS
    spring
    db
    KPT
    배포
    It
    코딩테스트
    Testcode
    운영체제
    SQL
    세션
    개발자
    메모리
    내일배움캠프
    web
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 14 [ 키오스크 과제(1~2단계) ]
상단으로

티스토리툴바