Developing Myself Everyday
article thumbnail
안드로이드의 MessageQueue 이해하기
Android/Kotlin 2025. 4. 8. 09:35

이번 게시글에서는 안드로이드에서의 MessageQueue에 대해 알아보고자 합니다.  MessageQueue란?MessageQueue는 특정 스레드에서 실행될 작업들(Message, Runnable)의 목록을 저장하는 큐입니다.  안드로이드 앱에서는 버튼 클릭, UI 갱신 등 다양한 이벤트가 발생합니다. 이런 작업들을 한 번에 처리하지 않고, 메시지 형태로 큐에 넣어 순서대로 처리하기 위해 MessageQueue가 사용됩니다. 당연하게도, MessageQueue만으로는 원하는 작업을 처리할 수 없고 안드로이드는 두 가지 핵심 도구인 Looper와 Handler를 사용하여 작업을 진행합니다.RunnableRunnable은 1개의 메서드를 갖는 함수형 인터페이스입니다. 하나의 작업 단위를 정의하여 실행 가능..

[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. 애..

아이템 48 - 더 이상 사용하지 않는 객체의 레퍼런스를 제거하라

메모리 관리를 자동으로 해준다고 해서 메모리 관리를 완전히 무시해 버리면, 메모리 누수가 발생하여 `OutOfMemoryError`가 발생할 수 있습니다. 따라서 '더 이상 사용하지 않는 객체의 레퍼런스를 유지하면 안 된다'라는 규칙을 지키는 것이 좋습니다. 안드로이드에서는 Activity를 여러 곳에서 자유롭게 접근하기 위해서 companion 프로퍼티에 이를 할당해 두는 경우가 있습니다.class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) activity = this } co..

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

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

[이펙티브 코틀린] 5장 - 객체 생성

data class DialogConfig( val icon: Int = -1, val title: Int = -1, val onCancelListener: (() -> Unit)? =null)fun makeDefaultDialogConfig() = DialogConfig( icon = R.drawble.ic_dialog, title = R.string.dialog_title, onCancelListener = { it.cancel() })코틀린은 함수형 스타일과 객체 지향 스타일로도 작성할 수 있습니다. OOP는 객체를 생성해서 사용하므로, 객체를 생성하는 방법을 정의하여야 합니다. 객체 생성 방식에 따라서 다른 특징이 생기기에 여러 방법을 알아야 합니..

article thumbnail
[이펙티브 코틀린] 4장 - 추상화 설계

추상화(abstraction)은 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다. 간단하게 말하자면, 추상화는 복잡성을 숨기기 위해 사용되는 형식을 의미합니다. 대표적인 예로는 인터페이스가 있습니다. 어떤 객체애 대한 추상화는 여러 가지가 나올 수 있고, 객체는 여러 형태로 추상화해서 표현할 수 있습니다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지를 결정해야 합니다. 프로그래밍에서의 추상화프로그래밍에서 하는 일은 기본적으로 추상화입니다. 예를 들어 숫자를 입력하면, 이는 내부적으로 0과1이라는 형식으로 표현됩니다. 추상화를 설계한다는 것은 단순하게 모듈 또는 라이브러리로 분리한다는 의미가 아닙니다.  강력한 프로그래밍 언어들이 갖고 있는 기..