목록전체 글 (41)
훌륭한 개발자가 되기 위하여

구조화된 동시성구조화된 동시성 원칙 : 비동기 작업을 구조화해 비동기 프로그래밍을 보다 안정적이고, 예측 가능하게 만드는 원칙코루틴을 부모-자식 관계로 구조화해 코루틴이 보다 안전하게 관리되고 제어될 수 있다코루틴 빌더 함수의 람다식 안에서 새로운 코루틴 빌더 함수를 호출하면 된다.fun main() = runBlocking { launch { println("부모 코루틴 실행") launch { println("자식 코루틴 실행") } }}실행 환경 상속부모 코루틴은 자식 코루틴에게 실행 환경을 상속한다.부모 코루틴이 자식 코루틴을 생성하면 부모 코루틴의 CoroutineContext가 자식 코루틴에게 전달된다.자식 코루틴을 생성하는 ..
CoroutineContext👉 Coroutine 실행 환경을 설정하는 객체CoroutineContext의 구성요소CoroutineName : 코루틴의 이름 설정에 사용되는 객체CoroutineDispatcher : 코루틴을 스레드에 보내서 실행하는 객체Job : 코루틴의 추상체로 코루틴을 조작하는데 사용되는 객체CoroutineExceptionHandler : 코루틴에서 발생된 예외를 처리구성요소 관리방법CoroutineContext 객체는 구성요소에 대한 키-값 쌍으로 관리한다.각 구성요소는 고유한 키를 가지며, 키에 대한 중복된 값은 허용되지 않는다.키값CoroutineName 키CoroutineName 객체CoroutineDispatcher 키CoroutineDispatcher 객체Job 키Jo..
async-awaitasync 호출시 코루틴 생성, Deferred 타입의 객체가 반환async 함수도 launch 함수와 마찬가지로 context 인자로 CoroutineName이나 CoroutineDispatcher 설정 가능start 인자로 CoroutineStart.LAZY를 설정해 지연 코루틴 생성 가능async 블록의 반환값으로 반환할 결과값을 설정하면 자동으로 제네릭 타입이 지정됨fun main() = runBlocking { // Deferred val networkDeferred = async(Dispatchers.IO) { delay(1000L) return@async "Network Response" }} 결과값이 필요한 경우 결과값이 수신될 ..
코루틴 순차 처리토큰을 받아서 업데이트 한 후 네트워크 요청을 해야한다고 가정했을 때, 업데이트 되기 전에 네트워크 요청이 되면 권한 없음과 같은 오류가 발생할 수 있다. 만약 A 코루틴이 완료된 후에 B 코루틴이 실행되야 한다면, B 코루틴이 실행되기 전에 A 코루틴에 대해 join 함수를 호출하면 된다.이 때, Job 객체의 join 함수를 사용하면 코루틴 순차 처리가 가능하다. fun main() = runBlocking { val job1 = launch(Dispatchers.IO) { println("작업 1") delay(1000L) println("작업 2") } job1.join() val networkCallJob = launch..

스레드 기반 작업의 한계스레드 기반 작업들은 작업의 전환이 어렵고, 전환에 드는 비용이 비싸다.간단한 작업에서는 콜백 방식 or 체이닝 함수를 사용하여 스레드 블로킹 문제를 해결할 수 있지만 실제 애플리케이션은 작업 간의 종속성이 복잡해 스레드 블로킹이 발생하는 것은 필연적이다.코루틴을 사용하면 스레드의 사용 권한을 양보 할 수 있다.runBlocking : 이 함수를 호출한 스레드를 사용해 실행되는 코루틴을 만들어낸다.→ runBlocking 코루틴이 종료될 때 스레드 점유가 해제된다.runBlocking 함수는 시작구에서만 사용하고 내부에서 coroutine을 추가로 생성할 때는 launch 함수를 사용해야 한다.Coroutine Dispatcher코루틴을 스레드로 보내 실행시키는 객체새로운 코루틴이..

클린 아키텍처소프트웨어 시스템의 구조를 설계할 때 지켜야 할 원칙과 방법을 정의한 개념이다.이 개념은 로버트 C. 마틴(Robert C.Martin)에 의해 소개되었으며, 코드의 유지보수성, 확장성, 테스트 용이성 및 모듈 간의 분리를 강조하여 안드로이드 애플리케이션을 더 구조화된 방식으로 개발할 수 있도록 설계되었다.특히, 계층화된 구조를 통해 의존성 규칙을 준수하는 것을 핵심으로 한다. 클린 아키텍처의 필요성클린 아키텍처는 소프트웨어 시스템의 구조를 체계적으로 설계함으로써 여러 가지 장점을 제공한다. 가장 큰 장점 중 하나는 시스템의 각 부분을 독립적으로 개발하고 테스트가 가능하다는 점이다. 또한, 시스템의 변경이나 업그레이드가 필요할 경우 특정 부분만 수정하는 것이 가능하다.예를 들어, 어플에서 사..