이번 게시글에서는 저번 게시글에 이어서 Koin의 core 기능들에 대해서 계속해서 알아보고자 합니다. 1편은 아래 링크에서 확인하실 수 있습니다. Koin 톺아보기 1편이번 게시글에서는 Koin에 대해 알아보고자 합니다. Koin이란?Koin은 Kotlin에 특화된 경량화된 의존성 주입 프레임워크입니다. koin은 다음과 같은 2가지의 의존성 주입 방식이 있습니다.Kotlin DSLAnnotateveryday-develop-myself.tistory.com Qualifiers`Qualifiers`는 Koin 모듈에서 동일한 타입의 여러 정의를 구분할 수 있도록 해줍니다. 동일한 인터페이스에 대해 여러 구현체가 있는 경우나, 동일한 타입이지만 서로 다른 설정이 필요할 때 `Qualifiers`를 사용..
이번 게시글에서는 Koin에 대해 알아보고자 합니다. Koin이란?Koin은 Kotlin에 특화된 경량화된 의존성 주입 프레임워크입니다. koin은 다음과 같은 2가지의 의존성 주입 방식이 있습니다.Kotlin DSLAnnotation 2가지 방식의 기능 차이는 거의 존재하지 않기에 원하는 방식을 사용하여 의존성을 주입할 수 있습니다. 런타임 의존성 주입koin은 기본적으로 런타임에 의존성을 주입해 줍니다. 런타임의 장점은 유연하다는 것입니다. 다른 의존성 주입 라이브러리와 달리 상황에 따라 동적으로 의존성을 주입할 수 있습니다.// 동적 모듈 로딩 (Hilt 불가)if (featureEnabled) { loadKoinModules(premiumFeatureModule)}// 기능 비활성화 ..
사진: Unsplash의Nick Russill 코루틴을 언제 사용하는가?여러 작업을 동시에 수행하는 애플리케이션을 만들기 위해, 즉 "동시성"을 구현하기 위해 Kotlin은 코루틴을 사용합니다. JVM과 Kotlin/Native 환경에서, 코루틴을 포함한 모든 동시성 코드는 OS가 관리하는 스레드 위에서 실행됩니다. 코루틴은 스레드를 블로킹(Blocking)하지 않고 실행을 중단(Suspend) 할 수 있습니다. 이를 통해 하나의 코루틴이 어떤 데이터가 도착하기를 기다리며 중단되어 있는 동안, 같은 스레드에서 다른 코루틴이 실행될 수 있어, 시스템 자원을 효율적으로 사용할 수 있습니다. 코루틴과 스레드 비교스레드는 운영체제가 관리합니다. 스레드는 여러 CPU 코어에서 작업을 병렬로 실행할 수 있으며..
이번 게시글에서는 안드로이드에서의 MessageQueue에 대해 알아보고자 합니다. MessageQueue란?MessageQueue는 특정 스레드에서 실행될 작업들(Message, Runnable)의 목록을 저장하는 큐입니다. 안드로이드 앱에서는 버튼 클릭, UI 갱신 등 다양한 이벤트가 발생합니다. 이런 작업들을 한 번에 처리하지 않고, 메시지 형태로 큐에 넣어 순서대로 처리하기 위해 MessageQueue가 사용됩니다. 당연하게도, MessageQueue만으로는 원하는 작업을 처리할 수 없고 안드로이드는 두 가지 핵심 도구인 Looper와 Handler를 사용하여 작업을 진행합니다.RunnableRunnable은 1개의 메서드를 갖는 함수형 인터페이스입니다. 하나의 작업 단위를 정의하여 실행 가능..
이번 게시글에서는 Flow의 생산자에 대해서 알아봅니다. Flow 생산자 (Producer)Flow란?우리가 사용하는 Flow는 아래와 같은 인터페이스입니다. 이 인터페이스는 `collect`라는 중단 함수를 가지고 있습니다. public interface Flow { public suspend fun collect(collector: FlowCollector)} collect 함수는 `FlowCollector`를 인자로 받아 Flow가 발생한 데이터를 수집합니다. 즉, Flow가 데이터를 발행하고, `FlowCollector`가 그것을 처리하는 구조입니다. `FlowCollector`는 Flow가 발행한 데이터를 실제로 처리하는 객체입니다. `FlowCollector`의 핵심 메서드인 `emi..
이번 게시글에서는 코루틴의 구조적 동시성에 대해 알아보고자 합니다. 구조적 동시성이란?시작하기에 앞서구조적 동시성(Structured Concurrency)이란 동시성 작업의 흐름을 순차적으로 제어할 수 있도록 하는 방식입니다. 일반적으로 코드는 순차적으로 실행되지만 동시성 작업이 추가되면, 제어의 흐름을 벗어나게 됩니다. 아래의 그림의 `myfunc`와 같이 말이죠. 동시성 작업이 완전히 통제되기를 기대할 수는 없습니다. 일정 부분은 그대로 흘러가게 두어야 합니다. 그러나 이러한 흐름을 적절히 제어해야만, 전체 작업이 예측 가능한 순서로 실행되도록 보장할 수 있습니다. Nurseries동시성 작업을 제어하기 위한 개념으로 `nurseries`가 등장했습니다. `nurseries`의 핵심 아이디..
시작하기에 앞서 사실 Kotlin에서 어떤 게 직접 중간 연산자라고 말하지는 않았습니다. 다만 공부할 때 도움이 되기 위해서, Flow에서 어떠한 작업을 한 다음, Flow를 반환하는 확장 함수들을 중간 연산자로 분류해 보겠습니다. 다만, 중간 연산자의 종류가 워낙 많기에 그 역할에 따라 이해하기 위해 제 나름대로 분류를 해봤습니다. 꼭 이렇게 분류를 해야한다는 것은 아니니까 각자 이해하기 쉽게 분류하는 것이 좋을 수 있습니다. 분류는 다음과 같습니다.변형 연산자제한 연산자지연 연산자병합 연산자Side-Effect 연산자에러 처리 및 복구 연산자Context를 전환하는 연산자 변형 연산자transform먼저 값을 변형하는 중간 연산자를 이해하는데 기본이 되는 `transform` 연산자를 보겠습니다..
사진: Unsplash의John Matychuk 이번 게시글에서는 Flow의 collect에 대해 알아보고, collect가 코루틴을 언제 중단시키는지 문제와 함께 알아보고자 합니다. Flow의 collect 메서드Flow는 비동기 데이터 스트림으로, 순차적으로 값을 방출하고 정삭적으로 완료하거나 예외와 함께 완료됩니다. Flow inferface에는 `collect` 메서드가 존재하는데, 이 메서드는 FlowCollector를 입력받아 데이터를 emit할 수 있도록 합니다.public interface Flow { public suspend fun collect(collector: FlowCollector)} collect는 suspend 함수이다.여기서 알아두어야 할 것은 `collec..