Kotlin9 [Kotlin] MutableSharedFlow의 tryEmit()이 실행되지 않을 때 SharedFlow는 코루틴에서 쉽게 사용할 수 있는 Hot Stream입니다. 안드로이드에서는 뷰모델에서 이벤트 처리할 때 자주 사용합니다. 이번에 MutableSharedFlow를 사용하며 tryEmit()이 실행되지 않는 이슈가 있었고, 이에 대한 내용을 공유해보고자 합니다. 아래에 예시 코드는 뷰모델에서 특정 이벤트를 발생시켜 액티비티에서 이벤트를 처리해주는 코드입니다.class MainViewModel @Inject constructor() : ViewModel() { private val _event = MutableSharedFlow() val event = _event.asSharedFlow() fun doSomething() { _event.tryE.. 2022. 7. 3. [Kotlin] inline에 대하여 - inline, noinline, crossinline, reified inline 키워드에 대해서는 처음 코틀린을 공부할 때 보긴 봤었지만, 정확히 어떤 상황에서 사용하는지 알지 못했었다. 이번에 코틀린 확장 함수를 정리하다가 inline 키워드에 대하여 자세히 알게 되었고, 관련 내용을 기술하려고 한다. inline 키워드를 한마디로 설명한다면 다음과 같다. 고차 함수를 사용하면 런타임 패널티가 있기 때문에 함수 구현 자체를 코드에 넣음으로써 오버헤드를 없앨 수 있다. 이게 대체 무슨 말일까? 예시를 통해 좀 더 쉽게 알아보자. inline fun doSomething(action: () -> Unit) { action() } fun callFunc() { doSomething { println("문자열 출력!") } } 위와 같은 고차 함수가 있다고 하자. 이 코드를 .. 2020. 10. 11. [Kotlin] Kotlin의 Delegates 알아보기 - observable, vetoable 디자인 패턴에서 Delegate Pattern이란 어떠한 기능을 자기 자신이 처리하지 않고 다른 객체에 일을 위임시켜 그 객체가 일을 처리하게끔 하는 것이다. Kotlin의 Delegates를 활용하면 여러 가지 일을 간단하게 처리할 수가 있다. 이 글에서는 Delegates의 observable과 vetoable를 활용하는 방법을 알아볼 것이다. observable과 vetoable을 사용하면 어떤 데이터의 값이 변경되었는지 쉽게 알아낼 수가 있다. 다시 말해, 옵저버 패턴을 쉽게 구현할 수가 있다. observable observable은 위에서 언급한 대로 프로퍼티를 observable 하게 만들어준다. 이것을 이용하면 프로퍼티의 데이터가 변할 때마다 callback을 받을 수 있다. public .. 2020. 10. 1. [Kotlin] 코틀린 문법 정리 - 04 1. 제네릭 (Generic) fun toFunction(value: T): () -> T = { value } fun main(args: Array) { val func: () -> Int = toFunction(1170) println(func()) } 2. 여러 타입을 인수로 받기 fun toFunction(value1: T, value2: R): () -> T = { value1 } fun main(args: Array) { val func: () -> Int = toFunction(1170, "test") println(func()) } 3. 구체화된(Reified) 타입 매개변수 타입 매개변수는 is 연산자의 피연산자로 사용할 수 없다. fun check() { val number = 0 if.. 2020. 4. 16. [Kotlin] 코틀린 문법 정리 - 03 1. Inline 함수 Inline 함수는 함수 호출문을 함수의 몸체로 대체하기 때문에 성능을 조금이나마 개선할 수 있다. inline fun hello(){ println("hello") println("kotlin") } fun main(args: Array) { hello() hello() hello() } Inline 함수를 호출하면 컴파일 되는 순간 아래와 같은 코드로 대체된다. fun main(args: Array) { println("hello") println("kotlin") println("hello") println("kotlin") println("hello") println("kotlin") } 2. lateinit lateinit 키워드가 붙은 프로퍼티는 클래스 안에서 바로 초기.. 2020. 4. 11. [Kotlin] 코틀린 문법 정리 - 02 1. 클래스를 상속하는 객체 클래스 없이 object 표현식을 사용해 상속을 할 수 있다. 이때의 상속은 1회용이 된다. open class Person(val name: String, val age: Int) { open fun print() { println("이름:$name, 나이:$age") } } fun main(args: Array) { val custom: Person = object : Person("Alan", 23) { override fun print() { println("it's a object") } } custom.print() } 2. Any 클래스 모든 코틀린 클래스들은 Any 클래스를 상속한다. open class Any { open operator fun equals(o.. 2020. 4. 5. 이전 1 2 다음