Kotlin SAM(Single Abstract Method)을 사용하는 방법

Kotlin에는 SAM Conversions이 제공됩니다. Single Abstract Method의 약자로 SAM이라고 합니다.

이름에서 알 수 있듯 SAM은 하나의 추상 메서드에 대해서 lambdas 식을 제공합니다. 단, Java에서 작성한 Interface 정의와 이를 활용하는 setOnClickListener를 kotlin에서 부르는 경우에만 이에 해당합니다.

코틀린에서 유용해야 하는데 실제로는 kotlin에서 작성한 interface와 setOnClickListener 구현체가 있을 경우에는 SAM이 동작하지 않습니다.

이번 글에서는 Java에서 만들어진 interface 정의와 이를 활용하는 setOnClickListener을 java와 Kotlin에서 구현할 때 다른 점을 알아보고, Anonymous class와 Higher-Order Functions 정의를 이번 글에서 살펴보겠습니다.

Read More

Kotlin Generics 정의

kotlin의 Generics을 정리합니다. Java에서 사용하는 Generics과 동일하게 사용할 수 있지만, Kotlin은 Generics 정의한 클래스를 상속받을 때 명시적으로 지정해야 합니다.

다시 말해 java에서는 제네릭 정의를 하지 않아도 기본 Object로 만들어주지만, 코틀린에서는 명시적으로 꼭 적어주도록 만들었습니다.

Read More

Kotlin Higher-Order Functions 사용방법

Kotlin에는 Higher-Order Functions이 제공됩니다.

Higher-Order Functions은 함수를 변수로 넘겨주거나, 이를 반환하는 것을 말합니다. 아래 코드는 레퍼런스 문서에 나와있는 lock 함수를 그대로 옮겨왔습니다.

fun <T> lock(lock: Lock, body: () -> T): T {
    lock.lock()
    try {
        return body()
    }
    finally {
        lock.unlock()
    }
}

Read More

Android Architecture - MVC에서 MVP에서 MVVM으로 가는 길

Android MVC/MVP/MVVM가 소개되었고, 다양한 방법으로 이러한 Architecture를 적용하게 됩니다.

구글에서는 테스트 가능한 형태를 만들어주기 위해서 Android Architecture Blueprints을 소개해주었습니다. 하지만 모두가 이러한 방법을 따르는 것은 아닙니다.

저도 공부를 하면서 다양한 MVP 패턴을 학습 및 고민한 흔적을 Android MVP 무작정 따라하기 시리즈로 남길 수 있었습니다.

이번 글에서는 MVC > MVP > MVVM으로 순차적으로 넘어가게 되었던 내용을 정리해보았습니다.

제 생각을 정리한 글입니다. 단순 참고해주세요. RxJava/data-binding 등의 이야기는 별개입니다.

Read More