반응형

Kotlin 7

[Kotlin] StateFlow subscriptionCount 구독자 수 확인

StateFlow는 Hot stream으로 구독 여부와 상관없이 데이터를 발행합니다. 그래서 경우에 따라 비효율적인 동작이 될 수 있습니다. subscriptionCount로 구독자 수를 확인할 수 있습니다. 구독자 수를 확인하여 데이터 발행 유무를 판단하면 더 효율적인 동작을 만들 수 있습니다. Cold Stream과 Hot Stream 차이는 아래 포스팅에서 확인할 수 있습니다. 2021.10.05 - [Kotlin] - [Kotlin] Cold Stream(flow), Hot Stream(flow) 차이점 아래 예제는 구독자가 있는 경우 onActive()를 호출하고 구독자가 생기면 onInactive()를 호출합니다. onActive()가 호출 될 경우 데이터 발행을 처리하고 onInactive(..

Kotlin 2021.10.15

[Kotlin] Type checks와 형변환(casts)

is와 !is 연산자 is 연산자와 !is 연산자는 object가 주어진 type인지 Runtime에 확인(checks)해줍니다. if (obj is String) { print(obj.length) } if (obj !is String) { //!(obj is String) 와 같습니다. print("Not a String") } else { print(obj.length) } Smart casts 대부분 Kotlin에서 명시적으로 형변환(Explicit casts)할 필요는 없습니다. 컴파일러가 is -checks를 추적하고 불변의 값(immutable values)이 명시적으로 형변환(cast)이 필요하면 safe casts를 자동으로 넣어줍니다. fun demo(x: Any) { if (x is ..

Kotlin 2021.10.06

[Kotlin] Cold Stream(flow), Hot Stream(flow) 차이점

Flow를 사용하다 보면 Cold Stream, Hot Stream 이란 용어를 들어볼 수 있습니다. Cold Stream, Hot Stream의 차이점을 정리하겠습니다. Cold Stream 하나의 소비자(Consumer)에게 값을 보냅니다. 생성된 이후에 누군가 소비하기 시작하면 데이터를 발행합니다. 예를 들어 상태가 변하지 않는 값을 읽을 때 데이터베이스를 읽거나 URL을 통해서 서버 값을 읽는 경우 Cold Stream으로 구현할 수 있습니다. Hot Stream 하나 이상의 소비자(Consumer)에게 값을 보낼 수 있습니다. 데이터 발행이 시작된 이후 부터 모든 소비자에게 같은 데이터를 발행하고 구독자가 없는 경우에도 데이터를 발행합니다. 예를 들어 상태가 변하는 값을 읽을 때 네트워크 상태 ..

Kotlin 2021.10.05

Kotlin callbackFlow callback listener의 데이터를 Coroutines flow로 보내기

Android에서 callback listener를 코루틴(Coroutines) flow로 보내는 방법을 포스팅합니다. Android에서 이벤트가 호출될 때 listener를 통해 응답을 처리합니다. Flow를 이용하여 데이터 흐름을 만드려고할 때 listener를 통해 받은 값을 flow로 보낼 수 없습니다. Flow와 listener 내부의 scope가 다르기 때문에 listener내부에서 emit을 사용하여 바로 데이터를 보낼 수 없습니다. (Suspension functions can be called only within coroutine body) 이러한 경우 callbackflow를 사용하여 listener 내부 값을 flow로 보낼 수 있습니다. listener 내부에서 offer함수를 호..

Kotlin 2021.09.13

[Kotlin] 기본적인 구문 - 2

Kotlin의 기본적인 구문(Basic syntax)에 대한 정리입니다. 2021.09.03 - [Kotlin] - [Kotlin] 기본적인 구문 - 1 [Kotlin] 기본적인 구문 - 1 Kotlin의 기본적인 구문(Basic syntax)에 대한 정리입니다. 패키지 정의와 imports 방법(Package definition and imports) 기본적으로 Java와 동일하게 패키지명은 소스파일의 맨 위에 작성합니다. package three.. 3edc.tistory.com 조건 표현식(Conditional expressions) fun maxOf(a: Int, b: Int): Int { if (a > b) { return a } else { return b } } Kotlin에서 if를 표현식..

Kotlin 2021.09.07

[Kotlin] 기본적인 구문 - 1

Kotlin의 기본적인 구문(Basic syntax)에 대한 정리입니다. 패키지 정의와 imports 방법(Package definition and imports) 기본적으로 Java와 동일하게 패키지명은 소스파일의 맨 위에 작성합니다. package three.sal import java.util.* 프로그램 진입점(Program entry point) 일반적인 언어들과 동일하게 프로그램은 main() 함수부터 시작됩니다. fun main() { println("Hello world!") } String 리스트를 인자로 받는 main함수는 아래와 같습니다. fun main(args: Array) { println(args.contentToString()) } Print 표준 출력 print("Hello..

Kotlin 2021.09.03

Kotlin companion object(동반 객체)

자바에서 흔히 쓰이는 static 키워드(keyword)가 Kotlin에는 없습니다. Kotlin에서는 대다수의 사용자가 static 대신 companion object(동반 객체)를 사용하고 있습니다. static 키워드와 동일하게 다른 클래스에서 객체 생성 없이 companion object에 선언된 변수와 함수에 접근이 가능합니다. 이렇게 static과 유사하게 사용되고 있지만 static과 다른 차이점도 존재합니다. 먼저 companion object는 아래와 같이 구현할 수 있습니다. class TestClass { companion object { const val TAG = "tag" fun companionMethod() = println("Hello world") } } companion..

Kotlin 2020.05.20
반응형