🍥구현 기능
- 프로그램을 종료할 때까지 5초마다 실시간 주문 대기수를 출력하기
🍥구현하기
OrderCountManager 클래스
- 5초마다 실시간 주문 대기수 출력을 구현한 클래스
- 프로퍼티:
- 메소드:
- 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(){
val job1 = GlobalScope.launch{orderCountManager.printOrderCount()}
val job2 = GlobalScope.launch {
firstLoop@ while (true) {
}
}
runBlocking {
job1.join()
job2.join()
}
}
}