[Kotlin 문법 심화] 팀과제 - 키오스크 Lv5. (1)

0
post-thumbnail

🍥구현 기능

  • 특정 작업이 종료된 후, 3초 뒤에 다른 작업을 수행할 수 있도록 구현하기

🍥구현하기

build.gradle

  • 코루틴 사용을 위해 dependency 추가
dependencies {
	implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
}

TaskDelayManager 클래스

  • 특정 작업 수행에 3초가 걸리도록 구현하는 클래스
  • 메소드:
    • delayTask3seconds(taskName:String)
      특정 작업의 이름을 매개변수로 받아, 해당 작업 완료 메세지를 3초 뒤에 출력한다
class TaskDelayManager {
    fun delayTask3seconds(taskName:String){
        val job = kotlinx.coroutines.GlobalScope.launch{
         println("${taskName} 진행 중입니다...")
         delay(300)
         println("${taskName} 완료되었습니다.")
        }
        runBlocking {
            job.join()
        }
    }
}

SelectMenuScreen

  • 장바구니에 담기 -> 작업이 3초 소요되도록 run 함수 수정
[Burgers 메뉴 선택 화면]
1. ShackBurger - 가격 - 메뉴 설명
2. ...
b. 뒤로 가기 - 메인 화면으로 돌아갑니다.
-> 1
선택한 메뉴는 ShackBurger 입니다.
장바구니에 담기 진행 중입니다...
장바구니에 담기 완료되었습니다.
    override fun run(menuResult:String){
        menuItemCollection =  MyKiosk.myMenu.myMenuCollections[menuResult.toInt()-1]

        while(true){
            val input = getInput()
            if(input == "b") return

            //선택한 메뉴 장바구니에 추가
            val selectedMenuItem = menuItemCollection!!.getMenuItemAt(input.toInt()-1)
            println("선택한 메뉴는 ${selectedMenuItem.name} 입니다.")

            MyKiosk.shoppingCart.addMenuItem(selectedMenuItem)
            MyKiosk.taskDelayManager.delayTask3seconds("장바구니에 담기")
        }
    }

DeleteFromShoppingCartScreen

  • 장바구니에서 항목 삭제 -> 작업이 3초 소요되도록 run 함수 수정
[장바구니에서 항목 삭제하기]
삭제할 항목의 번호를 입력하세요.
-> 1
장바구니에서 항목 삭제 진행 중입니다...
장바구니에서 항목 삭제 완료되었습니다.
    override fun run(): String {
        val input = getInput()
        MyKiosk.shoppingCart.removeMenuItemAt(input.toInt() - 1)
        MyKiosk.taskDelayManager.delayTask3seconds("장바구니에서 항목 삭제")
        return ""
    }

OrderPaymentScreen

  • 입금하기, 출금하기 -> 작업이 3초 소요되도록 run 함수 수정
[주문 결제 화면]
주문하기 위해 필요한 금액은 30000원 입니다.
현재 잔고는 15000원 입니다.
추가로 입금할 금액을 입력해주세요.(단위: 원)
-> 20000
입금 진행 중입니다...
입금 완료되었습니다.
현재 잔고는 35000원 입니다.
출금 진행 중입니다...
출금 완료되었습니다.
    override fun run(): String {
        costSum = MyKiosk.shoppingCart.getCostSum()
        balance = MyKiosk.paymentManager.getBalance()

        printScreen()
        while(balance < costSum) {
            val money = getInput()
            balance = MyKiosk.paymentManager.deposit(money.toInt())
            MyKiosk.taskDelayManager.delayTask3seconds("입금")
            println("현재 잔고는 ${balance}원 입니다.")
        }
        if(MyKiosk.paymentManager.withDraw(costSum)){
            MyKiosk.taskDelayManager.delayTask3seconds("출금")
            return "true"
        }
        return "false"
    }
profile
Be able to be vulnerable, in search of truth

0개의 댓글