제이슨의 개발이야기

[안드로이드 코틀린] 코루틴을 이용해서 파이어베이스 동기 처리하기! 본문

안드로이드

[안드로이드 코틀린] 코루틴을 이용해서 파이어베이스 동기 처리하기!

제이쓰은 2021. 4. 15. 18:59
728x90
반응형

안녕하세요 오늘은 코루틴을 이용해서 파이어스토어 접근할때 동기식으로 처리하는 방법에 대해서 공부하고자 합니다 !

 

일단 동기 비동기 에 대해 잘 모르시는 분들은 

jason-api.tistory.com/23

 

프로그래밍 용어 빌드? sdk? jdk? 컴파일?

안녕하세요 프로그래밍 공부를 하고 있는 학생이나 면접을 준비하고 있는 취업 준비생 혹은 전공생 분들이 개발 공부를 하다보면 문득 이런 생각이 듭니다 빌드가 근대 뭐지? sdk가 뭐지? 컴파일

jason-api.tistory.com

가서 동기와 비동기에 대해서 공부 하거나 아니면 구글에 더 좋은 설명이 되어있는 블로그를 통해서 공부하시기 바랍니다 ^^ 

 

바로 본론으로 넘어가서 

 

파이어베이스 에서 새로운 도큐먼트를 넣거나 혹은 읽을때는 비동기로 처리가 됩니다 그래서 개발자 입장에서는 이걸 동기식으로 처리받고 싶은대 비동기로 처리해야해서 불편함을 느끼시는 분들이 상당히 많습니다 ! 

 

코루틴을 이용하면 정말 간단하게 불편함을 해소할 수 있습니다 

CoroutineScope(Dispatchers.IO).launch {

var result : Boolean         

    runBlocking {

              result= fb.sumit()

              }

                      println("${result}")

}

이 코드는 코루틴 스코프를 이용해서 runBlocking 부분을 기다리고 나서 결과값 을 출력하는 부분입니다 

코루틴 스코프에서. Dispatchers.IO 는 현재 영역을 input 과 output 을 한다 라고 생각하시면 쉽고 

launch 는 메인 스레드로 실행한다 라는 의미입니다

만약 새로운 스래드로 실행하고 싶으면 async를 launch 대신 사용하시면 됩니다! 

그리고 나서 runBlocking 부분에 들어가게 되면 중단되고  해당 스레드는 runBlocking 부분이 끝날때 까지 기다리고 나서 끝나면 

다시 코드를 실행합니다 !

 

바로 예제 코드로 넘어가겠습니다 ! (예제코드는 앞서 코드랑 차이가 좀 있습니다!)

suspend fun submit:Boolean{

            return try {

                    db.collection("xxxx").document("yyyy")

                                                     .get().await()

                               true

}catch (e:FirebaseException){

Log.e("error:","erroe:"+e.message.toString())

                                false

} }


코루틴을 사용하는 함수는 반드시 suspend를 fun 앞에 붙어야 합니다 

 그리고 나서 db.~~~ 부분 마지막에 .await() 부분을 붙어서 

해당 작업이 끝날때까지 잠시 대기 합니다 

await 는 작업이 완료되는 것을 기다리고 T 타입의 객체를 리턴합니다.

그리고 나서 결과에 따라 true 와 false 를 반환합니다 ! 

 

이렇게 코드 작성을 하면 파이어스토어에 접근 결과에 따라 리턴을 받을 수 있습니다 ! 

728x90
반응형