반응형
Kotlin에서 suspend 키워드는 코루틴을 사용하여 비동기 프로그래밍을 할 때 사용합니다. suspend 함수는 코루틴 안에서 실행되며, 비동기 작업을 수행할 수 있게 해줍니다. 이 함수는 실행을 중단할 수 있고, 필요에 따라 나중에 다시 시작할 수 있습니다. 이런 특징 때문에 suspend 함수를 사용하면 메인 스레드를 차단하지 않으면서 비동기 작업을 간결하게 처리할 수 있습니다.
suspend 함수의 특징
- suspend 함수는 코루틴 스코프 내에서만 호출할 수 있습니다.
- suspend 함수 내부에서는 다른 suspend 함수를 호출할 수 있습니다.
- suspend 함수는 비동기 작업을 수행할 때 유용하며, delay(), async(), await()와 같은 코루틴 빌더와 함께 사용됩니다.
- suspend 함수는 CoroutineDispatcher를 통해 적절한 스레드에서 실행될 수 있습니다.
사용 예시: 주문, 결제 확인 및 배송 처리
아래 코드는 주문 정보를 확인하고, 결제 정보를 확인한 후 배송 처리를 하는 예제입니다. 배송이 완료된 후에는 예상 도착 시간과 적립 예정 포인트를 계산하여 출력합니다.
import kotlinx.coroutines.*
data class Order(val id: String, val amount: Double)
data class Payment(val orderId: String, val amount: Double, val status: String)
data class Shipment(val orderId: String, val estimatedArrival: String)
data class Reward(val points: Double)
suspend fun getOrder(orderId: String): Order {
delay(1000)
println("주문 정보를 가져왔습니다: $orderId")
return Order(orderId, 1500.0)
}
suspend fun checkPayment(order: Order): Payment {
delay(1000)
println("결제 상태를 확인했습니다: ${order.id}")
return Payment(order.id, order.amount, "완료")
}
suspend fun processShipping(payment: Payment): Shipment {
delay(1000)
println("배송 처리를 완료했습니다: ${payment.orderId}")
return Shipment(payment.orderId, "2일 후")
}
suspend fun calculateReward(payment: Payment): Reward {
delay(500)
val points = payment.amount * 0.01 // 1% 적립
return Reward(points)
}
fun main() = runBlocking {
val orderId = "12345"
val order = getOrder(orderId)
val payment = checkPayment(order)
if (payment.status == "완료") {
val shipment = processShipping(payment)
val reward = calculateReward(payment)
println("주문이 성공적으로 처리되었습니다.")
println("배송 예정일: ${shipment.estimatedArrival}")
println("적립 예정 포인트: ${reward.points}점")
} else {
println("결제가 완료되지 않았습니다.")
}
}
이 예제에서 getOrder(), checkPayment(), processShipping(), calculateReward() 함수는 모두 suspend 함수입니다. 비동기 작업을 처리하기 위해 delay() 함수를 사용했습니다. main() 함수에서는 runBlocking 코루틴 빌더를 사용하여 비동기 작업을 처리하면서도 메인 스레드를 차단하지 않습니다.
이 코드는 주문 ID가 "12345"인 주문을 처리하는 예시로, 주문 정보를 가져오고, 결제 상태를 확인한 후, 결제가 완료되었다면 배송 처리를 진행합니다. 배송 처리가 완료되면 예상 도착 시간과 적립 포인트를 출력합니다.
반응형
'Kotlin' 카테고리의 다른 글
함수형 인터페이스 consumer, supplier, Function (1) | 2023.10.08 |
---|---|
스프링 부트와 코틀린으로 구현하는 온라인 쇼핑몰 결제 서비스 API (0) | 2023.09.28 |
Kotlin으로 동일한 숫자가 연속적으로 포함되어 있는지 확인하기 (0) | 2023.09.28 |
URL의 파라미터값을 Kotlin에서 Map으로 변환하는 방법 (0) | 2023.09.28 |