Kotlin

    [Compose Side Effect] Disposable Effect 란 무엇인가?

    Disposable Effect란? DisposableEffect란 Composable이 Dispose된 후에 정리해야 할 Side Effect가 있는 경우에 사용되는 Effect이다. 자세히 이야기 하면 Composable의 Lifecycle에 맞춰 정리되어야 하는 리스너나 작업이 있는 경우에 리스너나 작업을 제거하기 위해 사용되는 Effect가 바로 DisposableEffect이다. 안드로이드에서는 Lifecycle에 따라 Side Effect(부수 효과)를 발생시킨 다음 정리되어야 하는 부분이 많다. 이런 부분에서 제대로 Side Effect에 대한 정리를 하지 않으면 제어권을 잃어 메모리에 leak이 생기거나 예측하지 못한 결과나 나올 수 있다. Disposable Effect 사용 방법 Dis..

    [Kotlin] apply, run, with, let, also 차이 한 번에 정리하기

    범위 지정 함수(Scope function)란? 범위 지정 함수는 특정 객체에 대한 작업을 블록 안에 넣어 실행할 수 있도록 하는 함수이다. 블록은 특정 객체에 대해 할 작업의 범위가 되며, 따라서 범위 지정 함수라 부른다. 특정 객체에 대한 작업을 블록안에 넣게 되면 가독성이 증가하여 유지 보수가 쉬워진다. 코틀린에서는 let. run, apply. also, with 총 5가지 기본적인 범위 지정함수를 지원한다. 코틀린의 범위 지정 함수 1. apply 2. run 3. with 4. let 5. also 범위 지정함수와 수신객체 지정 람다(함수) 범위 지정함수는 다른 말로 수신객체 지정 람다(함수)라고도 부른다. 이유는 수신객체를 명시하지 않거나 it을 호출하는 것만으로 람다 안에서 수신객체의 메서..

    [Coroutine Flow] 3. stateIn 사용하여 Flow를 StateFlow로 변환하기

    Flow와 StateFlow 우리는 리액티브 프로그래밍을 할 때 여러 데이터 흐름(flow)를 하나로 합쳐 하나의 데이터 흐름(Flow)으로 만들어낸다. 예를 들어 아래의 그림3에서는 Flow가 3개 있고 이것이 합쳐져 하나의 Flow를 만들어낸다. 이러한 상황은 흔하다. 예를 들어 우리가 영화 평점 앱을 만든다고 할 경우 영화에 대한 정보, 사용자에 대한 정보, 사용자의 영화의 평점에 대한 정보를 각 테이블에서 가져와 하나의 객체로 만들어야 한다. 하나로 만들어진 Flow는 UI에서 사용되기 위해 StateFlow로 변환되어야 한다. 이 UI에서는 이 StateFlow를 구독하여 항상 최신 데이터를 발행받는다. 이것이 가능하기 위해서는 Flow를 StateFlow로 변환하는 로직이 필요하다. 또한 St..

    [코틀린과 객체지향] 2. 자율적인 객체

    실제 세계의 객체와 객체지향 세계의 객체의 차이 앞선 글에서 객체를 실제 세계에 비유하니 객체가 무엇인지 한 번에 이해를 했을 것이다. 이러한 이유 때문에 흔히들 객체를 실제 세계에 비유해 설명한다. 하지만, 실제 세계의 객체는 프로그래밍 상의 객체와 다른 점이 있다. 실제 세계에서는 대부분의 객체들은 수동적이며, 사람이나 고양이 혹은 강아지 같은 자율적인 객체들에 의해 수동적으로 행동한다. 하지만 객체지향 세계의 객체는 수동적으로 행동하지 않는다. 예를 들어보자. 사람들이 사용하는 조명, 펜, 가위 등은 사람에 의해 수동적으로 행동한다. 조명은 사람에 의해 켜지고, 펜과 가위는 사람에 의해 사용된다. 그렇다면 이러한 수동적인 객체들은 프로그래밍 상의 객체가 될 수 없는걸까? 당연히 될 수 있다. 수동적..

    [Kotlin] object 를 이용한 싱글톤 패턴 구현

    개발을 하다보면 객체에 대한 하나의 인스턴스만 필요할 때, 하나의 인스턴스를 재사용하기 위해 싱글톤 패턴을 구현해야 할 일이 생긴다. *싱글톤 패턴 : 객체의 인스턴스를 1개만 생성하여 계속 재사용 하는 패턴 Java에서의 싱글톤 기존 자바에서는 싱글톤 패턴을 구현하기 위해 많은 코드를 작성해야 했다. 보통은 다음과 같은 방식으로 싱글톤 패턴을 구현하였다. public class SingletonClass { // 1. static으로 선언된 객체를 담는 변수(instance) private static SingletonClass instance; public String sampleString = "Sample String"; // 싱글톤에 집중하기 위해 public으로 설정 private Single..