Developing Myself Everyday
article thumbnail
Flow의 collect은 언제 suspend 될까?
Android/Kotlin 2025. 1. 21. 20:18

사진: 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..

article thumbnail
왜 SharedFlow의 emit()은 suspend 함수일까?
Android/Kotlin 2025. 1. 1. 16:27

사진: Unsplash의Erfan   이번 게시글에서는 SharedFlow에 `emit()`을 호출할 때 발생했던 의문점을 해결해보고자 합니다.  의문점: 왜 SharedFlow의 emit()은 suspend 함수일까?저는 ViewModel에서 발생하는 Effect를 SharedFlow를 통해서 관리하고 있습니다. 예를 들어, 스낵바를 띄우는 행위를 하기 위해 SharedFlow에 `emit()`을 해야 하는데, 이를 위해 매번 viewModelScope.launch를 통해 별도의 코루틴을 생성해야 했습니다. private fun showSnackBar(message: String) { viewModelScope.launch { _UiEffect.emit(UiEffect.ShowSnac..

article thumbnail
Kotlin에서의 함수 컬러링이란? suspend와 composable 함수
Android/Kotlin 2024. 10. 15. 20:39

사진: Unsplash의Robert Katzki  Compose에 대해 공부를 하다 보니 함수 컬러링이란 개념에 대해 알게 되었습니다. 이번 게시글에서는 함수 컬러링에 대해 알아보고자 합니다.   함수의 색상겉으로 표시되고 있지는 않지만 모든 함수에는 색상이 존재합니다. 우리는 특정 조건을 통해 함수의 색상을 지정할 수 있습니다. 아래와 같이 빨간색과 파란색 함수가 존재한다고 가정해 보겠습니다.fun red() {}fun blue() { }  이런 여러가지의 함수들에 존재하는 단 하나의 규칙은 '파란색 함수는 어디에서든 호출할 수 있지만, 빨간색 함수는 빨간색 함수 안에서만 호출할 수 있다.` 다는 것입니다.fun red2() { red() blue()}fun blue2() { red..

article thumbnail
KAPT, KSP 그리고 어노테이션
Android/Kotlin 2024. 9. 11. 15:26

사진: Unsplash의Noah Buscher  안드로이드 스튜디오에서 코틀린으로 개발을 하다 보면, KAPT나 KSP 플러그인을 추가해야 하는 상황이 생깁니다. 무의식적으로 일단 하라고 하니까, 해왔긴 한데 이게 뭔지 제대로 알아본 적이 없는 거 같아 이번 게시글에서 공부해보고자 합니다.   먼저 어노테이션이란?KAPT, KSP에 대해 이야기하기 전에 먼저 어노테이션에 대해 이해하고 있어야 합니다. 어노테이션의 한국뜻은 `주석`으로 우리가 코드에 대한 설명을 주석을 통해 붙이듯 코드에 부가적인 정보를 제공하는 역할을 합니다. 부가적인 정보는 메티데이터의 형태로 제공되며 컴파일러나 런타임 환경에서 해석될 수 있습니다. 어노테이션하면 가장 먼저 `@Override`가 떠오르실 것 같습니다. 이 어노테이션은..

article thumbnail
Immutable 그리고 Persistent Collections에 대해서
Android/Kotlin 2024. 2. 26. 19:13

사진: Unsplash의Tahlia Doyle  List에 대해서 배울 때, 우리는 일반적으로 MutableList와 비교하며 List는 변경될 수 없는 Immutable한 컬렉션이라고 배웠습니다. 다만, 이는 큰 관점에서는 틀린 정보입니다. 그래서 이번 게시글에서는 List가 왜 Immutable하지 않는지, 그리고 Immutable한 컬렉션은 뭐가 있는지 알아보고자 합니다.   List는 Immutable하지 않다!List는 Read-only라고 말합니다. 변경할 수 없고, 오직 읽을 수만 있는 컬렉션이라고 우리는 배워왔습니다. 다만, 이는 넓은 관점에서는 틀린 말입니다. 아래의 코드를 보겠습니다. 변수 `number`는 val로 선언되어 있기 때문에 변경될 수 없습니다.class Example { ..

article thumbnail
Ktor에 대해 알아보고 HTTP 통신 해보기
Android/Kotlin 2023. 12. 4. 12:36

사진: Unsplash의Alina Grubnyak 안드로이드 개발을 하다 보면 HTTP 요청을 해야 하는 경우가 있습니다. HTTP 요청을 처리할 수 있는 가장 흔하게 사용되는 라이브러리로는 Retrofit2이 있습니다. Retrofit2은 클라이언트와 서버사이에 비동기적인 네트워크 요청 처리를 해주는 라이브러리입니다. 인터페이스에 어노테이션을 사용해서 생각보다 간편하게 구현할 수 있습니다. 다만, Retrofit2은 기본적으로 자바 라이브러리입니다. 현재 안드로이드에서 사용하는 라이브러리들은 코틀린 멀티 플랫폼을 위해 코틀린만으로 구성된 라이브러리로 만들어지고 있는 추세입니다. 그렇기에 Retrofit2를 계속해서 사용하는 것에도 제한 사항이 발생하였습니다. 이러한 제한 사항을 해결하기 위해 코틀린만으..

article thumbnail
@Inject로도 @Provide할 수 있다
Android/Kotlin 2023. 11. 25. 12:45

사진: Unsplash의Sangga Rima Roman Selia 이 게시글은 저의 무지함으로 발생한 질문에서 시작된 게시글입니다. Now In Android를 참고하여 프로젝트를 진행하던 도중 "Data 모듈에서 Domain의 Usecase에 Repository를 주입할 때에는 @Provide를 사용해서 이를 주입해 주는데, Feature 모듈에서 Usecase를 주입 받을 때에는 왜 @Provide를 하지 않아도 주입받을 수 있는가?" 라는 질문이 생겼습니다. 이 게시글에서 이 질문에 대한 답을 하고자 합니다. 질문에 대한 답 위의 질문은 사실 Dagger를 잘 이해하지 못하고 Hilt를 사용해서 생긴 질문입니다. @Provide와 @Inject은 컴포넌트에서 의존성 그래프를 만들기 위한 과정입니다...

article thumbnail
코틀린에서 Backing Properties를 왜 사용해야 하죠?
Android/Kotlin 2023. 11. 22. 18:04

사진: Unsplash의Hardik Pandya   최근에 프로젝트를 진행하면서 ViewModel에서 당연하다는 듯이 SharedFlow나 StateFlow를 사용해야 할 일이 많았습니다.private val _errorFlow = MutableSharedFlow()val errorFlow: SharedFlow get() = _errorFlowprivate val _uiState = MutableStateFlow(UiState.Loading)val uiState: StateFlow get() = _uiState  이렇게 아무 생각 없이 사용하다 보니, 왜 이렇게 2개로 나눠서 관리해야 하지? 라는 원초적인 질문이 생겼습니다. 그래서 이번 게시글에서는 이를 이해하기 위한 Field와 Property ..