투케이2K

109. (kotlin/코틀린) 코루틴 (coroutine) suspend 사용해 동기 로직 처리 실시 본문

Kotlin

109. (kotlin/코틀린) 코루틴 (coroutine) suspend 사용해 동기 로직 처리 실시

투케이2K 2022. 10. 10. 12:10
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

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


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

        /**
         * ------------------------------------
         * TODO [요약 설명]
         * ------------------------------------
         * 1. 코루틴은 동시성 프로그래밍으로 비동기적으로 실행되는 코드입니다
         * ------------------------------------
         * 2. 코루틴은 백그라운드 스레드 (네트워크 통신) 에서 코드를 처리할 때 자주 사용됩니다
         * ------------------------------------
         * 3. 코틀린 스코프는 새로운 코루틴을 생성함과 동시에 실행되어야 할 Job 을 그룹핑 합니다
         * ------------------------------------
         * 4. Default : 코루틴에서 연산 작업을 수행할 때 사용됩니다
         * ------------------------------------
         * 5. suspend : 코루틴 내에서만 호출할 수 있습니다 (비동기 환경에서 실행)
         * ------------------------------------
         * 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 = 0


            // [사전 카운트 작업]
            for (i in 1..2){
                Log.i("---","---")
                Log.w("//===========//","================================================")
                Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : [사전] 카운트 결과 확인]")
                Log.i("","\n"+"[count : "+ i +"]")
                Log.w("//===========//","================================================")
                Log.i("---","---")

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


            // [suspend 함수 호출]
            countMethod()


            // [사후 카운트 작업]
            for (i in 1..2){
                Log.i("---","---")
                Log.w("//===========//","================================================")
                Log.i("","\n"+"[Test_Kotlin > onCreate() 메소드 : [사후] 카운트 결과 확인]")
                Log.i("","\n"+"[count : "+ i +"]")
                Log.w("//===========//","================================================")
                Log.i("---","---")

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

        }

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

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





    // ============================== [suspend 함수 정의 실시] =====================================
    suspend fun countMethod(){

        for (i in 1..2){
            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > countMethod() 메소드 : [suspend] 카운트 결과 확인]")
            Log.i("","\n"+"[count : "+ i +"]")
            Log.w("//===========//","================================================")
            Log.i("---","---")

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

[결과 출력]


 

반응형
Comments