Kiosk.kt
fun main(){ while (true) { try { println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요") println("") println( "[ SHAKESHACK MENU ]\n" + "1. Burgers | 앵거스 비프 통살을 다져만든 버거\n" + "2. Frozen Custard | 매장에서 신선하게 만드는 아이스크림\n" + "3. Drinks | 매장에서 직접 만드는 음료\n" + "4. Beer | 뉴욕 브루클린 브루어리에서 양조한 맥주\n" + "0. Exit | 프로그램 종료" + "\n" + "\n" + "[ ORDER MENU ]\n" + "5. Order | 장바구니를 확인 후 주문합니다.\n" + "6. Cancel | 진행중인 주문을 취소합니다." ) var pick = readln().toInt() val cartMenu = Cart() when (pick) { 1 -> Burgers().displayInfo() 2 -> FrozenCustard().displayInfo() 3 -> Drinks().displayInfo() 4 -> Beer().displayInfo() 5 -> cartMenu.displayCart() 6 -> cartMenu.cartMenu.clear() 0 -> { println("프로그램을 종료합니다.") break } else -> println("잘못된 번호입니다 다시 입력해주세요.") } } catch (e: NumberFormatException) { println("숫자로 입력해주세요.") println("") return continue } } }
- 메인 화면에서는 각 메뉴로 통하게 그대로 구현하였고 ORDER MENU를 추가하면서 장바구니 확인을 할 수 있도록 만들어주었다. (아직 미완)
- 조건문에서는 해당 되지않는 숫자가 나오면 문구가 나오게 else로 간단하게 예외처리 해주었고 전체 반복문에서는 try catch를 통해 다른 자료형이 입력될시 문구가 나오도록 예외처리 해주었습니다.


class Item
abstract class Item() { abstract fun displayInfo(): Unit }
- 추상클래스에서는 displayInfo 함수를 끌어다 썼는데 이렇게 써도 되는건지 사실 잘 모르겠습니다.
class Menu
class Menu(var num: Int, var name: String, var price: String) { fun displayInfo(): Unit { } }
- class Menu에서는 하위 클래스들의 각 메뉴 변수를 상속 받을 수 있게 해주었습니다.
class Burgers
class Burgers() : Item() { val bugerList = arrayListOf<Menu>( Menu(1, "ShackBurger", "₩ 6,900"), Menu(2, "SmokeShack", "₩8,900"), Menu(3, "Shroom Burger", "₩9,400"), Menu(4, "Cheeseburger", "₩6,900"), Menu(5, "Hamburger", "₩5,400"), Menu(0, "뒤로가기", "") ) val cart = Cart() override fun displayInfo(): Unit { println("[ Burgers MENU ]") for (menu in bugerList) { println("${menu.num}. ${menu.name} | ${menu.price}") } while (true) { try { when (readln().toInt()) { 1 -> { println("${bugerList[0].name} | ${bugerList[0].price} 입니다.") cart.addMenu(bugerList[0]) } // 2 -> { println("${bugerList[1].name} | ${bugerList[1].price} 입니다.") cart.addMenu(bugerList[1]) } // 3 -> { println("${bugerList[2].name} | ${bugerList[2].price} 입니다.") cart.addMenu(bugerList[2]) } // 4 -> { println("${bugerList[3].name} | ${bugerList[3].price} 입니다.") cart.addMenu(bugerList[3]) } // 5 -> { println("${bugerList[4].name} | ${bugerList[4].price} 입니다.") cart.addMenu(bugerList[4]) } // 0 -> { break } // else -> println("잘못된 번호입니다 다시 입력해주세요.") } } catch (e: NumberFormatException) { println("숫자로 입력해주세요.") println("") return continue } } } }
- list에 bergers 메뉴를 넣어서 for 반복문으로 번호, 이름 ,가격 순으로 출력되게 하였고
1번을 누르면 리스트 각 번호에 맞는 이름과 가격이 나오고 cart에 있는 mutableList로 add되도록 설정하였습니다. 처음에는 list에 담은 인덱스 값을 어떻게 출력하지 하는 의문에 이틀은 보낸것 같은데 다른 분의 예시 코드 보면서 많이 참고한 형태입니다.- 계산기와는 다르게 각 담당 클래스의 코드가 굉장히 많아져서 맞는지 헷갈리지만 한번 진행해 보았습니다.
- 마지막은 Kiosk.kt와 마찬가지로 예외처리 해주었습니다.
class Cart
class Cart { val cartMenu: MutableList<Menu> = mutableListOf() fun addMenu(menu: Menu) { cartMenu.add(menu) println("카트에 ${menu.name}을 넣었습니다.") } // fun displayCart() : Unit { return if (cartMenu.isEmpty()) { println("카트가 비어 있습니다.") } else { displayCartList() println("${cartMenu}") } } // private fun displayCartList() { val listGroup = cartMenu.groupingBy { it }.eachCount() for ((item, count) in listGroup) { println("${item.displayInfo()} (${count})") } } }
- Cart 클래스에서는 mutableList를 통해 담긴 내용을 관리하려고 하였고 각 메뉴에서 메뉴를 선택하면 cartMenu.add를 통해 메뉴가 cart에 들어가고 아래 displayCart 함수를 통해 메인화면에서 기능을 담당하게 뿌려줄려고 하였으나... 출력과는 별개로 mutableList에 담기지가 않아서 아직 미완성입니다.


list에 대한 추가 공부 후 수정해봐야겠습니다.
이번 개인과제를 진행하면서 배운점도 있고 제가 아직 모자란 부분을 알게된 것 같습니다.
아직은 클래스와 상속에 대해서 완벽하지않고 추상클래스는 거의 모르고 있지않나 생각합니다.
구현보다는 완벽하게 알아가야하는 이번 주였기에 강의와 구글링을 통한 추가 공부가 필요하다고
생각하며 오늘 과제를 마무리 했습니다.