#11 Kotlin Koans Introduction/SAM conversions 해설

1 소개



Kotlin 공식 레퍼런스의 Kotlin Koans/Object expressions의 해설 기사입니다.

Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.

다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!

일단 각자 도전하고 나서 볼 수 있다고 생각합니다

2 인터페이스/SAM conversions



인터페이스: 추상 함수만(속성은 정의되지 않음)으로 구성된 클래스입니다.

SAM (Single Abstract Method) 인터페이스 : 추상 함수가 단 하나로 구성된 인터페이스.

SAM coversions란, SAM 인터페이스(의 객체)를 인수로서 요구하는 함수에는, 람다 식을 건네줄 수 있다고 하는 규칙입니다.

3 Introduction/SAM conversions 해설



Kotlin Koans Introduction/SAM conversions 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.

오른쪽의 본문을 보자.

When an object implements a SAM interface (one with a Single Abstract Method), you can pass a lambda instead. Read more about SAM-conversions .

In the previous example change an object expression to a lambda.

Introduction/Object expressions 의 코드를 다시 작성하므로 이 코드와 이 장의 Kotlin 코드를 살펴보겠습니다.
//Introduction/Object expressionsのコード
import java.util.*

fun getList(): List<Int> {
    val arrayList = arrayListOf(1, 5, 2)
    Collections.sort(arrayList, object : Comparator<Int>{
        override fun compare(x : Int,y : Int) = y - x
    })
    return arrayList
}


//Introduction/Object expressionsのコード
import java.util.*

fun getList(): List<Int> {
    val arrayList = arrayListOf(1, 5, 2)
    Collections.sort(arrayList, { x, y -> TODO() })
    return arrayList
}

Introduction/Object expressions 코드를 생각해 봅시다.

sort() 함수는, 제1 인수에 List를 제2 인수에 object 식을 받고 있습니다.

이 때 object 식은 Comparator 클래스를 상속합니다.

Comparator 클래스 은 인터페이스이며 함수가 하나만 정의되어 있습니다.

즉, Comparator 클래스는 SAM 인터페이스입니다.

그래서 sort() 함수는 두 번째 인수에 SAM 인터페이스를 상속한 객체를 요청하고 있기 때문에 SAM conversions를 이용할 수 있습니다.

Introdcution/SAM converions 코드를 살펴보겠습니다.

sort () 함수의 두 번째 인수에 x와 y라는 두 개의 인수를 (compare () 함수에) 전달하여 TODO ()를 반환합니다.
람다 식을 전달합니다.

Intrduction/Object expressions의 compare() 함수에서는 반환값이 y - x 이므로,
Collections.sort(arrayList, { x, y -> y - x })

이렇게 다시 쓰면 좋네요.

4 마지막으로



다음 번은 Kotlin Koans Introducion/Extensions on collections의 해설을합니다.

좋은 웹페이지 즐겨찾기