Kotlin - 회사에서는 어떻게 도입하고? 학습해볼 수 있을까?

2017년 Google I/O 이후 Kotlin에 대한 관심도가 증가하였고, 샘플 코드와 각종 블로그 포스팅에서 Java보다 Kotlin에 대한 이야기가 많이 나오고 있다, 특히 Jake Wharton은 내부 Android 코드의 Kotlin 적용 적용 프로젝트에 참여로 구글에 입사하였고, 최근에는 자신이 가지고 있던 Retrofit2 모듈에 coroutines을 적용하기도 하였다.

다양한 사례들이 많이 나오고 있지만, 아직은 진행 중인 단계이다. 1.0 정식 버전이 나온 이후로부터 벌써 2년이라는 시간이 거의 끝나가고 있지만 실제 어떻게 적용할 수 있으며, 안정성은 어떤지에 대한 의문이 들 수밖에 없다.

이 글은 주관적으로 작성한 글이며, 일부는 회사에 적용한 사례를 바탕으로 적었다.

Read More

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