Developing Myself Everyday
[Flow 연산자] 생산자 총정리
Android/Kotlin 2025. 3. 31. 18:16

이번 게시글에서는 Flow의 생산자에 대해서 알아봅니다.   Flow 생산자 (Producer)Flow란?우리가 사용하는 Flow는 아래와 같은 인터페이스입니다. 이 인터페이스는 `collect`라는 중단 함수를 가지고 있습니다. public interface Flow { public suspend fun collect(collector: FlowCollector)} collect 함수는 `FlowCollector`를 인자로 받아 Flow가 발생한 데이터를 수집합니다. 즉, Flow가 데이터를 발행하고, `FlowCollector`가 그것을 처리하는 구조입니다. `FlowCollector`는 Flow가 발행한 데이터를 실제로 처리하는 객체입니다. `FlowCollector`의 핵심 메서드인 `emi..

article thumbnail
코루틴의 구조적 동시성(Structured Concurrency)
Android/Kotlin 2025. 3. 25. 20:45

이번 게시글에서는 코루틴의 구조적 동시성에 대해 알아보고자 합니다.    구조적 동시성이란?시작하기에 앞서구조적 동시성(Structured Concurrency)이란 동시성 작업의 흐름을 순차적으로 제어할 수 있도록 하는 방식입니다. 일반적으로 코드는 순차적으로 실행되지만 동시성 작업이 추가되면, 제어의 흐름을 벗어나게 됩니다. 아래의 그림의 `myfunc`와 같이 말이죠.  동시성 작업이 완전히 통제되기를 기대할 수는 없습니다. 일정 부분은 그대로 흘러가게 두어야 합니다. 그러나 이러한 흐름을 적절히 제어해야만, 전체 작업이 예측 가능한 순서로 실행되도록 보장할 수 있습니다.  Nurseries동시성 작업을 제어하기 위한 개념으로 `nurseries`가 등장했습니다. `nurseries`의 핵심 아이디..

article thumbnail
안드로이드에서 Context가 존재하는 이유
Android 2025. 3. 13. 09:12

게시글을 시작하기에 앞서 안드로이드가 말하는 Context의 정의에 대해 알아보겠습니다. Context의 정의Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. 애..

article thumbnail
[Flow 연산자] 중간 연산자 총정리
Android/Kotlin 2025. 2. 12. 18:10

시작하기에 앞서 사실 Kotlin에서 어떤 게 직접 중간 연산자라고 말하지는 않았습니다. 다만 공부할 때 도움이 되기 위해서, Flow에서 어떠한 작업을 한 다음, Flow를 반환하는 확장 함수들을 중간 연산자로 분류해 보겠습니다. 다만, 중간 연산자의 종류가 워낙 많기에 그 역할에 따라 이해하기 위해 제 나름대로 분류를 해봤습니다. 꼭 이렇게 분류를 해야한다는 것은 아니니까 각자 이해하기 쉽게 분류하는 것이 좋을 수 있습니다. 분류는 다음과 같습니다.변형 연산자제한 연산자지연 연산자병합 연산자Side-Effect 연산자에러 처리 및 복구 연산자Context를 전환하는 연산자    변형 연산자transform먼저 값을 변형하는 중간 연산자를 이해하는데 기본이 되는 `transform` 연산자를 보겠습니다..

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
얕은 복사, 깊은 복사 그리고 Data class의 copy()에 대한 고찰
Android/Kotlin 2024. 12. 17. 19:29

사진: Unsplash의Kelly Sikkema  이번 게시글에서는 얕은 복사와 깊은 복사에 대해 이해해보고, 데이터 클래스의 copy는 어떤 복사를 하고 있는지 알아보고자 합니다.   얕은 복사와 깊은 복사 이해하기"복사"한다는 것은 프로그래밍 관점에서 데이터를 새로운 메모리 공간에 재배치하여 원본 데이터와 독립적인 데이터 구조를 생성하는 작업을 의미합니다.  얕은 복사(Shallow Copy)얕은 복사는 객체의 참조 주소만 복사하여 새로운 객체를 생성하는 방식입니다. 만약 최상위 타입의 객체가 존재한다면, 최상위 객체만 새로운 메모리 공간에 복사하고 그 내부의 속성들은 원본 객체와 같은 참조를 공유하게 됩니다.fun main() { val original = mutableListOf("Bob",..

article thumbnail
Android Intent의 내부 동작 방식과 데이터 전달
Android 2024. 12. 11. 18:55

사진: Unsplash의Kelli McClintock  안드로이드 애플리케이션에서 4대 컴포넌트 구성 요소들 간에 통신에 사용되는 객체인 `Intent`를 개발하면서 많이 사용했었습니다.  문득, Intent가 어떤 식으로 동작하는지가 궁금해져 이번 게시글에서 이를 알아보고자 합니다.  Intent에 대한 기본적인 내용은 이 게시글에서는 다루지 않습니다. 만약 해당 내용이 필요하시다면 아래의 게시글을 참고해 주세요. Android의 Intent (인텐트)인텐트란?인텐트는 안드로이드 애플리케이션에서 4대 컴포넌트 구성 요소들 간에 통신하는 데 사용되는 객체입니다. 인텐트는 Activity를 실행하는 데 가장 많이 사용되지만 다른 용도도 있습니everyday-develop-myself.tistory.com ..