달달한 스토리

728x90
반응형

이번에도 정대리님의 강의를 보고 공부한 자료입니다. 

 

출처를 남깁니다.

 

https://www.youtube.com/channel/UCutO2H_AVmWHbzvE92rpxjA

 

개발하는 정대리

한국에서 개발자로 살아남기! 예전에 저처럼 프로그래머가 되고 싶지만 그 길을 몰라 해매는 분들에게 도움 되고자 이 채널을 운영하기 시작했습니다. 프로그램에 관심 있는 분들이나 취업 준

www.youtube.com

비동기 프로그래밍이란 무엇인가?,,,

 

나중에 배워야지 나중에 배워야지 하면서,

 

계속 미루어두었던 개념이다.

 

어쩌면 이번 기회에 어느 정도 단디 배우고 가야겠다.

 

우선 간단히 말하자면,

 

동기란, 서버에 만약에 api를 요청하여 데이터를 받아올 때,

 

A 작업을 다 완료해야지 B작업으로 넘어갈 수 있는 방식,

 

한마디로 순서대로 A가 끝나지 않으면, B작업을 할 수 없는 것이다.

 

그렇다면 비동기는 무엇일까?

 

그 반대이다.

 

비동기는 A 작업이 오든 안 오든 B는 알아서 작업을 하는 것이다.

 

각각 따로따로 자기 작업들을 알아서 실행한다는 뜻이다.

 

멀티가 되냐 안되냐로 쉽게 설명할 수 있을 것이다.

 

그래서 오늘은 간단한 예제로 비동기를 알아보고자 한다.

 


예시

 

class MainActivity : AppCompatActivity() {

    var mBinding: ActivityMainBinding? = null
    val binding get() = mBinding!!

    val TAG: String = "로그"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        Log.d(TAG, "MainActivity - onCreate() called")

        var sooyeol = "sooyeol"

        someCallBackMethod(sooyeol, completion = {
            //매개변수로 들어간 completion이 smeCallBackMethod안에서 실행될때, 액션을 넣는 곳

            Log.d(TAG, "MainActivity - 컴플레션 블럭 호출됨 it: $it")
        })

    }

    //콜백 함수 정의하기
    private fun someCallBackMethod(sooyeol: String, completion: (String) -> Unit) { //자바에 보이드와 같음
        Log.d(TAG, "MainActivity - someCallBackMethod() called")

        //핸들러로 1초가 지나면 실행
        Handler(Looper.myLooper()!!).postDelayed({
            completion(sooyeol)
        }, 5000L)
    }
}

보여줄 건 단순히 이 코드이다.

 

 

someCallBackMethod를 우선 만들고 나서,

 

onCreate에서 

 

String값과 completion의 유닛 타입을 넘겨준다.

 

 

"() -> Unit" 아직 나는 이것에 대한 개념은 없지만,

 

흐름만 파악했기 때문에, 알게 될 때 더 자세히 다루고자 한다.

 

지금은 흐름만 보고, 이 것을 어떻게 활용할 수 있는지만 파악해 보겠다.

 

넘겨준 준 값을 someCallBackMethod에서 받고

 

핸들러를 만들어 5초 뒤에 값을 completion에 String 값을 넣어 실행을 해준다.

 

 

 

그러면 다시 onCreate에서 호출한

someCallBackMethod(sooyeol, completion = {
            //매개변수로 들어간 completion이 smeCallBackMethod안에서 실행될때, 액션을 넣는 곳

            Log.d(TAG, "MainActivity - 컴플레션 블럭 호출됨 it: $it")
        })

이 부분에서 "it"으로 처음 내가 보냈던 sooyeol이란 스트링 값이 넘어오게 된다.

 

동시에 여기에 찍어 두었던 컴플렉션 블록 호출됨이 실행이 되는 것이다.(5초 뒤에)

 

간단한 정리

 

내가 설명을 잘 못하는 것임으로 이해해주길 바란다.

 

그래서 이게 뭐냐? 이해가 안 간다?라고 할 수도 있겠다.

 

코드를 만들어서 직접 실행해 보면 이해가 빠를 것이다.

 

아래 시간을 보면 위에

 

Log.d(TAG, "MainActivity - onCreate() called")

Log.d(TAG, "MainActivity - someCallBackMethod() called")

 

두 로그가 찍히고 5초 뒤에

Log.d(TAG, "MainActivity - 컴프레션 블록 호출됨 it: $it")가 호출이 된다.

 

저 로그가 찍히는 순서대로 따라가면 금방 이해를 할 수 있을 것이다.

 

한마디로 onCreate가 실행되는 것과 무관하게,

 

someCallBackMethod처럼 따로 자기가 알아서 조건에 따라

 

비동기 처리를 할 수 있다는 것이다.

 

다른 말로 콜백 함수라고도 한다.

 

어려운 설명이 아닌 간단한 예제 코드로써 어느 정도 비동기를 이해했을 것이라고 믿는다.

 

정대리님의 좋은 설명으로 비동기를 잘 이해했다.

 

끝!

 

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading