Callback으로 받은 데이터를 Coroutines에서 활용하는 방법! Flow 활용

Callback Listener에서 전달되어오는 값을 Coroutines Flow에 전달하려면 어떻게 할 수 있을까?에서 시작한 고민을 글로 정리해 둔다.

이 글은 Flow에 대한 설명을 하지는 않을 것이지만 이를 해결하기 위해 사용한 방법은 아래와 같다.

  • Callback으로 들어온 값은 Coroutines의 suspend가 아니다.
  • flow에 emit 하려면 suspend 내에 있어야 한다.
  • SharedFlow와 StateFlow을 사용할 순 있다.

이 글은 방안에 대한 정리만 한 것일 뿐 전반적인 설명을 담고 있지는 않다. 그러니 참고용으론 활용할 수 있겠지 만 잘 이해하지 못하고 사용한다면 사용치 않는 것을 권장한다.

이 글에 도움 될 링크는 아래와 같다.


이 글에서 알아볼 내용

  • Callback으로 들어온 값을 Coroutines에 던져 처리하기 위한 방법을 설명한다.
  • SharedFlow와 StateFlow를 통한 해결 방법을 알아본다.

Read More

상속! 악마의 속삭임, 그 속에 숨겨진 문제점, Kotlin에서는 Delegation을 활용해 보자.

Java에서 설계할 때 매우 익숙하게 하는 게 있다. 바로 Base를 상속 구조로 만드는 것.

상속은 매우 쉽게 생각할 수 있고, 공통 작업을 분리할 때 매우 유용하게 사용할 수 있다.

Kotlin에서는 상속보다는 Delegation을 사용하라고 하는데, 상속 대신 Delegation을 사용할 때의 장점을 알아본다.

이 내용도 결국 Effective Java 3판에 잘 나오는데 아래 내용을 참고하면 좋다.

  • 아이템 18 : 상속보다는 컴포지션(Composition)을 사용하라
  • 아이템 19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라


이 글에서 알아볼 내용

  • 상속을 알아보고, 상속의 단점을 알아보다.
  • Composition을 알아본다.
  • Kotlin의 Delegation을 알아본다.

Read More

Kotlin Delegation을 알아보고, Delegated Properties와 class에서의 Delegation을 알아본다.

Kotlin은 Delegation을 제공하고, 매우 유용하게 사용할 수 있다.

매우 흔하게 볼 수 있는 by lazy {}를 통해 Delegated Properties을 알아보고, class에서 활용할 수 있는 Delegation을 알아본다.


이 글에서 알아볼 내용

  • Delegation을 알아본다.
  • Delegated Properties를 알아본다.
  • Lazy를 사용하는 property를 알아본다.
  • class에서 간단하게 사용할 수 있는 Delegation을 알아본다.

Read More

Java value는 언제나 null이다. 이를 Kotlin에서 활용 시 주의할 점을 알아본다.

Java 변수는 언제나 null을 허용하고, Kotlin 변수는 null을 허용치 않는다. 그래서 타입 정의에서 항상 null을 허용할지 말지를 직접 정의해야 한다.

// null 허용
val name: String? = null

// NonNull
val name: String = null // 문법 오류

Kotlin은 null을 허용하려면 ?을 추가해 null 임을 알려야 한다. 코틀린 만 사용한다면 별다른 문제는 없다. 하지만 Kotlin은 언제나 Java를 활용할 수 있고, 안드로이드 개발에선 Java SDK를 활용한다.

어떤 경우에 null을 허용하고, 어떨 때 null을 허용치 않아야 하는지 명확하지 않을 수 있다.

이 글에서는 자바와 함께 사용할 때 null 관련 어노테이션의 중요성을 알아본다.


이 글에서 알아볼 내용

  • Java는 항상 null 임을 알아본다.
  • Android SDK 사용 시에는 Nullable로 처리해야 할까?
  • Java에서 Kotlin의 값을 호출 시에는 null에 주의해야 하는데 알아본다.

Read More

Kotlin과 Java의 Nested and Inner Classes를 알아보고, Nested classes를 왜 사용해야 하는지 알아본다.

Kotlin은 class 안에 class(중첩 클래스)를 정의할 때 기본 Nested classes 룰을 사용한다.

inner classes가 아닌 이유를 찾기엔 자바를 이해하는 편이 가장 좋다. 이 글에서는 Java의 inner classes와 Nested classes를 통해 코틀린의 Nested classes 이유를 알아본다.


이 글에서 알아볼 내용

  • Java Inner classes와 Nested classes를 알아본다.
  • Kotlin의 Inner classes와 Nested classes를 알아본다.
  • Java의 어떤 문제로 코틀린은 Nested classes가 기본인지를 살펴본다.

Read More