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

0
post-thumbnail

🍥구현 기능

  • 프로그램을 종료할 때까지 5초마다 실시간 주문 대기수를 출력하기

🍥구현하기

OrderCountManager 클래스

  • 5초마다 실시간 주문 대기수 출력을 구현한 클래스
  • 프로퍼티:
    • orderCount
      실시간 주문 대기수
  • 메소드:
    • printOrderCount()
      5초마다 실시간 주문 대기수를 출력하는 suspend 함수
    • addOrderCount()
      실시간 주문 대기수 1 증가시키는 함수
class OrderCountManager {
    private var orderCount = 0

    suspend fun printOrderCount(){
        //프로그램이 종료될 때 까지 무한 반복
        while(true){
            delay(5000)
            print("(실시간 주문 대기수: ${orderCount})")
        }
    }

    fun addOrderCount(){
        orderCount++
    }
}

OrderCompleteScreen 클래스

  • 주문이 완료되면, 실시간 주문 대기수를 증가시키도록 run 함수 수정
    override fun run():String{
        printScreen()
        MyKiosk.orderCountManager.addOrderCount()
        return ""
    }

MyKiosk 클래스

  • companion object에 orderCountManager 프로퍼티 추가
  • run 함수에서 orderCountManager.printOrderCount()와 키오스크 프로그램이 비동기적으로 실행될 수 있도록 launch 코루틴 빌더를 사용한다
  • 실습 환경에서 출력값을 볼 수 있도록 메인 쓰레드가 종료되지 않게 runBlocking 블록을 사용한다
class MyKiosk private constructor(){

    //각 화면 구현
    //...생략...

    companion object{
        //싱글톤 패턴
        private var instance:MyKiosk? = null

        fun newInstance():MyKiosk{
            if(instance == null) instance = MyKiosk()
            return instance!!
        }

        val myMenu = MyMenu()
        var isTakeOut:Boolean = false
        val shoppingCart = MenuItemCollection()

        val paymentManager = PaymentManager()
        val taskDelayManager = TaskDelayManager()
        val dateTimeManager = DateTimeManager()
        val orderCountManager = OrderCountManager()
    }

    //키오스크 프로그램 실행 (무한 반복)
    fun run(){
        //5초마다 실시간 주문 대기수 출력하기
        val job1 = GlobalScope.launch{orderCountManager.printOrderCount()}

        val job2 = GlobalScope.launch {
            //0. 첫 화면
            firstLoop@ while (true) {
            	//...생략...
            }
        }

        runBlocking {
            job1.join()
            job2.join()
        }
    }
}
profile
Be able to be vulnerable, in search of truth

0개의 댓글