launch 함수의 Job launch함수로 시작한 Coroutine은 Job 타입의 객체를 Return한다 Job은 coroutine 자체를 의미하기에, launch로 실행되는 Coroutine을 취소할 수도 있고, 기다릴 수도 있다. → 즉 LifeCycle 에 관심이 있다. async 함수의 Deferred 여기서 Deferred는 Job을 상속한 클래스이기 때문에, launch를 사용한 곳에 async를 사용해도 항상 아무 문제가 없다. async는 return할 결과값이 있는데, Deferred타입으로 객체를 return한다. Deferred는 Future처럼 미래의 결과값을 담아놓을 수 있는 객체이며 결국 미래의 결과값을 의미하므로 완료되길 기다리다가 Return되는 값에 관심이 있다. Def..
Kotlin에서의 Coroutine 1편인 Coroutine이란 무엇인가 참고 Kotlin은 특정 coroutine은 언어가 지원하는 형태가 아닌, Coroutine을 구현할 수 있는 기본 도구를 언어가 제공하는 형태이다 Kotlin의 Coroutine 지원 기본 기능들은, kotlin.coroutine 패키지 밑에 있고, Kotlin 1.3부터는 Kotlin을 설치하면 별도의 설정없이도 모든 기능을 사용할 수 있다. 하지만, Kotlin이 지원하는 기본 기능을 활용해 만든 다양한 형태의 코루틴들은, kotlinx.coroutines 패키지 밑에 있다. Suspend와 Resume Suspend와 Resume은 Callback방식을 대체한 Coroutine만의 메커니즘으로, 다음과 같은 의미가 있다 Su..
Coroutine을 사용하는 이유 비동기 프로그래밍을 사용하는 이유 안드로이드에서 Main Thread는 UI Thread이다. 그렇기 때문에, Main Thread에서 UI를 그리는 것 이외에 복잡하고, 시간이 오래 걸리는 작업을 수행하는 것은 적합하지 않다. 만약, 이러한 작업을 수행하게 될 경우, 해당 작업이 끝날 때까지 시스템은 사용자에게 보여질 UI를 그리지 못하게되고, 사용자는 앱을 시작했음에도 긴 시간동안 빈화면을 보게 되는 일이 발생한다. (UI Freezing) 그래서 안드로이드에서는 해당 작업들을 Main Thread에서 하지 못하도록 한다. 이러한 복잡한 작업의 에로는 네트워킹이 대표적이다. 만약 네트워크 작업을 Main Thread에서 진행하려고 할 경우, NetworkOnMainT..
정의 Delegate란 단어를 직역하면 위임이라는 뜻을 가지고 있다. 현실에서 내가 대리인에게 결정 권한을 위임한다고 하면, 대리인은 우리 결정 권한을 가지게 된다. 이처럼 대리인은 내가 아님에도 불구하고, 결정 권한이라는 행동에 대해 나와 똑같이 행동할 수 있게 되는 것이다. Kotlin에서 의미하는 Delegate Pattern 또한 같은 의미이다. Kotlin의 Delegate Pattern은 한 객체에의 함수(행동) 혹은 Property(속성)의 구현을 다른 객체에 위임한다. 예를 들어 객체 1과 객체 2가 있다고 할 때, 객체 1의 행동을 객체 2에 위임한다고 하면, 객체 2는 객체 1의 함수와 Property를 위임받는다. 예시 부동산 게약을 위한 인터페이스가 있다고 가정했을 때 interfa..