투케이2K

108. (kotlin/코틀린) 코루틴 (coroutine) async , await 사용해 동시 비동기 처리 로직 수행 결과 확인 실시 본문

Kotlin

108. (kotlin/코틀린) 코루틴 (coroutine) async , await 사용해 동시 비동기 처리 로직 수행 결과 확인 실시

투케이2K 2022. 10. 9. 19:48

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

        // =================================== [변수 선언 실시] ======================================
        var coroutineJob: Job? = null


        // =================================== [코루틴 정의 실시] =====================================
        try{

            /**
             * ------------------------------------
             * TODO [요약 설명]
             * ------------------------------------
             * 1. 코루틴은 동시성 프로그래밍으로 비동기적으로 실행되는 코드입니다
             * ------------------------------------
             * 2. 코루틴은 백그라운드 스레드 (네트워크 통신) 에서 코드를 처리할 때 자주 사용됩니다
             * ------------------------------------
             * 3. 코틀린 스코프는 새로운 코루틴을 생성함과 동시에 실행되어야 할 Job 을 그룹핑 합니다
             * ------------------------------------
             * 4. Default : 코루틴에서 연산 작업을 수행할 때 사용됩니다
             * ------------------------------------
             * 5. async await : 비동기 로직 처리를 수행할 수 있으며 결과를 확인할 수 있습니다 
             * ------------------------------------
             * 6. 필요 import :
             *
             * import kotlinx.coroutines.CoroutineScope
             * import kotlinx.coroutines.Dispatchers.Default
             * import kotlinx.coroutines.launch
             * ------------------------------------
             * 7. 코루틴 개념 참고 사이트 : https://kkh0977.tistory.com/2761
             * ------------------------------------
             * 8. 코틀린 의존성 부여 참고 사이트 : https://kkh0977.tistory.com/2763
             * ------------------------------------
             * */

            // ------------------------------------

            // [로직 처리 실시]
            coroutineJob = CoroutineScope(Default).launch {
                
                // [변수 선언]
                var sum_1 = 0
                var sum_2 = 0


                // [async 비동기 작업]
                val async_1 = async {
                    Log.i("---","---")
                    Log.w("//===========//","================================================")
                    Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : async_1 작업 시작]")
                    Log.w("//===========//","================================================")
                    Log.i("---","---")

                    for (i in 1..5){ // [15 합계]

                        // [합계 더하기]
                        sum_1 = sum_1 + i

                        // [딜레이 설정]
                        delay(1000)
                    }

                    // [결과 반환]
                    sum_1
                }


                // [async 비동기 작업]
                val async_2 = async {
                    Log.i("---","---")
                    Log.w("//===========//","================================================")
                    Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : async_2 작업 시작]")
                    Log.w("//===========//","================================================")
                    Log.i("---","---")

                    for (i in 6..10){ // [40 합계]

                        // [합계 더하기]
                        sum_2 = sum_2 + i

                        // [딜레이 설정]
                        delay(1000)
                    }

                    // [결과 반환]
                    sum_2
                }
                
                // [await 비동기 작업 결과 확인]
                val sum_total = async_1.await() + async_2.await()


                // [로그 결과 확인]
                Log.i("---","---")
                Log.w("//===========//","================================================")
                Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : CoroutineScope 코루틴 로직 처리 결과 확인]")
                Log.i("","\n"+"[sum_1 : "+ sum_1 +"]")
                Log.i("","\n"+"[sum_2 : "+ sum_2 +"]")
                Log.i("","\n"+"[sum_total : "+ sum_total +"]")
                Log.w("//===========//","================================================")
                Log.i("---","---")

            }

            // ------------------------------------

        }
        catch(e : Exception){
            Log.i("---","---")
            Log.e("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : 에러 상황 발생]")
            Log.i("","\n"+"[error : "+ e.message +"]")
            Log.e("//===========//","================================================")
            Log.i("---","---")
        }
 

[결과 출력]

 

 

반응형
Comments