코틀린

    [Kotlin Coroutines] IntelliJ 사용해 Coroutines 디버깅 하기

    디버깅을 하기 위한 준비 Kotlin Coroutines는 일시 중단 후에는 다른 스레드에서 실행될 수 있기 때문에 디버깅을 하기가 매우 어렵다. 이 글에서는 디버깅을 하기 어려운 예 중에 가장 간단한 예시를 제시할 것이다. 다음의 코드를 보자. import kotlinx.coroutines.* fun main() = runBlocking { launch(Dispatchers.Unconfined) { println("launch1 Working Thread : ${Thread.currentThread().name}") delay(100) println("launch1 Working Thread : ${Thread.currentThread().name}") } launch { println("launch2..

    [Kotlin] Strategy Pattern : 전략 패턴을 사용한 유연성 증대 전략

    전략 패턴이란? 전략 패턴이란 런타임에 교체 가능한 알고리즘을 만드는데 사용되는 패턴이다. 하나의 객체가 다양하면서 변화하는 역할을 해야할 때 사용된다. 이름이 전략 패턴인 이유는, 객체의 행위를 전략(Strategy)을 통해 동적으로 바꿔주도록 해서 객체를 유연하게 만드는 패턴이기 때문이다. 전략 패턴 예시 우리가 이메일을 보낸다고 해보자. 이메일에는 시작말과 맺음말이 들어가며 사람마다 혹은 기기마다 이를 다르게 설정할 수 있어야 한다. 예를 들어 아마 한 동안 아이폰에서 메일을 보냈을 때 끝에 "Sent from IOS"라는 문구가 들어갔던 것을 기억할 것이다. 어떤 사람들은 아이폰을 사용하지 않음에도 저 문구가 멋있어 보여서 마지막에 "Send from IOS"라는 문구를 붙여서 보내기도 했다. 이..

    [Kotlin] 옵저버 패턴 직접 구현해보기

    개요 앞선 글에서 Delegates.observable이 어떻게 구현되었는지 살펴봤다. 이번 글에서는 이 구현을 간소화해서 필요한 부분만을 뽑아 옵저버 패턴을 구현해보고자 한다. 옵저버 패턴 직접 구현 해보기 1. Kotlin 변수의 변화를 인식하기 위한 interface 선언 Kotlin 변수의 변화를 인식하기 위해서는 operator fun getValue(thisRef: T?, property: KProperty): T, operator fun setValue(thisRef: T?, property: KProperty, newValue: T) 을 위임을 통해 다시 구현해야 한다. interface PropertyChangeListener { fun onPropertyChanged(oldValue: ..

    [Kotlin] 옵저버 패턴 내부 구현 살펴보기 : Delegates.observable은 어떻게 동작하는가?

    개요 앞선 글에서 옵저버 패턴이 무엇인지, 옵저버 패턴을 어떻게 사용하는지 살펴봤다. 단순히 라이브러리의 구현체를 가져다 쓰는 것도 좋지만, 구현체가 어떻게 이루어져 있는지 살펴보아야 더욱 깊게 이해할 수 있다. 따라서 이번 글에서는 옵저버 패턴이 어떻게 구현되어 있는지 내부를 직접 살펴보고 구현해보고자 한다. 이번 글에서는 Kotlin에서 기본으로 제공되는 메서드를 살펴보고, 비슷한 메서드를 만들어보도록 하자. Delegates.observable을 활용한 Observer Pattern 적용 Kotlin에서는 Delegates Object에서 제공되는 observable 함수를 통해 옵저버 패턴을 만들어낼 수 있다. String 타입의 data 변수를 선언한 후 변수의 구현을 Delegates.obse..

    [Kotlin] Observer Pattern : 옵저버 패턴 알아보기

    리액티브 프로그래밍과 옵저버 패턴 리액티브 프로그래밍 패러다임은 최근 프로그래밍 패러다임 중 가장 중요한 패러다임 중 하나이다. 리액티브 프로그래밍 패러다임이 유행하기 이전에는 명령형 프로그래밍 패러다임이 유행했다. 명령형 프로그래밍 패러다임 하에서는 데이터가 변할 때 데이터가 변화에 따라 데이터가 변해야 하는 부분에 모두 적용을 시켜줘야 했다. 리액티브 프로그래밍 패러다임은 데이터가 변하는 것을 관찰해서 데이터가 변할 때 동작을 변하도록 만드는 것을 기본으로 한다. 즉, 데이터에 반응(Reactive)하도록 코드를 만드는 것이다. 이렇게 하면 데이터가 변화할 때 변화가 필요한 부분에 변화를 관찰하도록 코드를 넣어주면 데이터가 변화했을 때 데이터 변화에 대한 변경 사항이 즉시 게시된다. 옵저버 패턴은 리..