이번 게시글에서는 저번 게시글에 이어서 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)}// 기능 비활성화 ..
이번 게시글에서는 Kotlin Multiplatform project structure에 대한 기초에 대해 공부해보고자 합니다. 여기서 다루는 내용은 공식 문서의 내용을 그대로 공부한 내용을 다루고 있습니다. The basics of Kotlin Multiplatform project structure | Kotlin Multiplatform kotlinlang.org Common codeCommon code는 다양한 플랫폼에서 공유해서 사용하는 코드입니다. 다양한 플랫폼에서 공유하는 Kotlin Code는 `commonMain`이라는 디렉토리 안에 위치해야 합니다. 이 위치는 매우 중요하며, 어떤 플랫폼으로 컴파일 되는지에 영향을 미칩니다. Kotlin 컴파일러는 플랫폼별 바이너리 집합을 생성하게 되..
사진: Unsplash의Francisco De Legarreta C. 이번 게시글에서는 앱을 운영하면서 발생한 문제와 이를 대처하는 방법을 알아보고자 합니다. 문제 상황유지 보수를 하던 중, 앱의 초기 Splash 로딩이 계속해서 반복된다는 오류를 받았습니다. 앱에서는 메인 액티비티에서 Splash 액티비티를 띄우고, Splash 액티비티에서 권한 체크를 한 다음 이상이 없으면 메인 액티비티로 돌아오는 구조로 설계가 되어 있었습니다. 문제를 계속 파악하던 중 어떠한 이유로 계속해서 Splash 액티비티가 실행된다는 사실을 알게 되었고, 이는 Main 액티비티에 `onCreate()`에서 실행하는 Splash 액티비티로 이동을 하는 메서드 때문이였습니다. onCreate()의 반복 실행다만, 이는 ..
Compose UI 매커니즘Compose는 데이터를 UI로 변환하기 위해 아래와 같은 세 가지 주요 단계를 통해 UI를 그리는 매커니즘을 사용합니다. Composable 함수들은 UI를 그리기 위해 각 단계를 매번 수행해야 합니다. 하지만, 동일한 입력일 때 동일한 결과를 계산하는 반복 작업은 불필요합니다. 그래서 Compose에서는 Recomposition에서 이전과 동일한 입력이 보장된다면, 동일한 결과를 계산하는 반복 작업(세 단계의 작업)을 생략합니다. 동일한 입력인지 판단히기Recomposition은 입력 매개변수가 변경될 떄, 트리거됩니다. Compose Runtime은 이전 매개변수 값을 기록해 뒀다가, `equals()`를 사용해서 새롭게 변경된 매개변수 값과 비교합니다. `equ..
사진: Unsplash의Nick Russill 코루틴을 언제 사용하는가?여러 작업을 동시에 수행하는 애플리케이션을 만들기 위해, 즉 "동시성"을 구현하기 위해 Kotlin은 코루틴을 사용합니다. JVM과 Kotlin/Native 환경에서, 코루틴을 포함한 모든 동시성 코드는 OS가 관리하는 스레드 위에서 실행됩니다. 코루틴은 스레드를 블로킹(Blocking)하지 않고 실행을 중단(Suspend) 할 수 있습니다. 이를 통해 하나의 코루틴이 어떤 데이터가 도착하기를 기다리며 중단되어 있는 동안, 같은 스레드에서 다른 코루틴이 실행될 수 있어, 시스템 자원을 효율적으로 사용할 수 있습니다. 코루틴과 스레드 비교스레드는 운영체제가 관리합니다. 스레드는 여러 CPU 코어에서 작업을 병렬로 실행할 수 있으며..
사진: Unsplash의Vidar Nordli-Mathisen 이번 게시글에서 Compose Navigation을 사용하면서 발생한 Recomposition 문제, 그리고 그 원인과 해결방안에 대해 이야기해보려고 합니다. Recomposition으로 인한 문제 발생어느 때와 같이 안드로이드 개발을 하던 도중 문제가 발생했습니다. 바로 NavHost가 리컴포지션 되면, 현재 화면이 계속 startDestination으로 되돌아간다는 문제였습니다. 제가 정의한 NavHost는 다음과 같습니다.NavHost( navController = navigator.navController, startDestination = navigator.startDestination,) { composabl..
사진: Unsplash의Towfiqu barbhuiya 면접에서 아키텍처 패턴에 대한 이야기를 할 때, 자주 나오는 질문이 MVI와 MVVM의 차이에 대해 묻는 것입니다. 이번 게시글에서는 이 질문에 대한 저의 답변을 한번 작성해보고자 합니다. 지극히 개인적인 생각이므로, 잘못되거나 다른 의견이 있으시다면 댓글로 작성해주시길 바라겠습니다. 두 아키텍처 패턴의 차이에 대해 말하려면, 먼저 각 아키텍처 패턴에 대해 이해하고 있어야 합니다. 그래서 차이에 대해 말하기 전에 각 패턴에 대해 알아보겠습니다. MVVM란?다음은 위키피디아에서 말하는 MVVM의 정의와 이미지 입니다.위키피디아: Model–View–ViewModel(MVVM)은 컴퓨터 소프트웨어에서 사용되는 아키텍처 패턴으로, 그래픽 사용자 인터페..