kotlinlang.org/docs/fun-interfaces.html#sam-conversions
์ถ์ ํจ์ ํ๋๋ง ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ functional interface, ๋๋ Single Abstract Method (SAM) interface๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ non-abstarct ๋ฉค๋ฒ๋ค์ ๊ฐ์ง ์ ์์ผ๋, ์ถ์ ํจ์๋ ํ๋๋ง ๊ฐ์ง๋ค.
fun ์์ ์๋ฅผ ์ด์ฉํด์ ํ์ํ๋ค. > fun interface
fun interface KRunnable {
fun invoke()
}
SAM conversions
SAM coversions๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค ํํ์์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ์ผ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
์๋์ผ๋ก functional interface๋ฅผ ๊ตฌํํ๊ธฐ ๋ณด๋ค๋, ๋๋ค ํํ์์ ์ธ ์ ์๋ค. SAM conversion์ ์ฐ๋ฉด, ์ฝํ๋ฆฐ์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ง ํ ๊ฐ์ ๋ฉ์๋์ ์๋ช ๊ณผ ์ผ์นํ๋ ์๋ช ์ ๊ฐ์ง ๋๋คํํ์์ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ก ๋ณํ์ํจ๋ค.
์๋ฅผ ๋ค์ด์, ๋ค์ Kotlin function interface๋ฅผ ์๊ฐํด๋ณด์.
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
SAM conversion์ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์จ์ผ ํ๋ค.
// Creating an instance of a class
val isEven = object : IntPredicate {
override fun accept(i: Int): Boolean {
return i % 2 == 0
}
}
Kotlin์ SAM conversion์ ํ์ฉํ๋ฉด, ์๋์ด ๋์ผํ ์ฝ๋๋ฅผ ์ธ ์ ์๋ค.
// Creating an instance using lambda
val isEven = IntPredicate { it % 2 == 0 }
์งง์ ๋๋ค ํํ์์ด ๋ชจ๋ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ค.
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
val isEven = IntPredicate { it % 2 == 0 }
fun main() {
println("Is 7 even? - ${isEven.accept(7)}")
}
๊ฒฐ๊ณผ
Is 7 even? - false
Functional interface vs. type aliases
Functional interface์ type aliases๋ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฐ์ธ๋ค. Type aliase๋ ์กด์ฌํ๋ ํ์ ์ ์ด๋ฆ๋ค๋ก, ์๋ก์ด ํ์ ์ ๋ง๋ค์ด๋ด์ง ์์ผ๋, functional interface๋ ์๋ก์ด ํ์ ์ ๋ง๋ค์ด๋ธ๋ค.
Type aliase๋ ์ค์ง ํ ๋ฉค๋ฒ๋ง ๊ฐ์ง๊ณ , functional interface๋ ์ฌ๋ฌ non-abstract ๋ฉค๋ฒ์ ํ๋์ ์ถ์ ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๋ค. Functional interface๋ ๋ํ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ค์ ์์๋ฐ์ ์ ์๋ค.
์์ ๊ฒ๋ค์ ๊ณ ๋ คํ ๋, functional interface๊ฐ type aliase๋ณด๋ค ๋ ์ ์ฐํ๊ณ ๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android/Crashlytics] libc.so / unknown ์ด์ - native crash (0) | 2021.03.29 |
---|---|
[Kotlin] Companion Object์ ํ์ฉ (0) | 2021.03.29 |
[Kotlin] Companion objects (0) | 2021.03.29 |
[์ฉ์ด] sideload (0) | 2021.03.26 |
[Kotlin] Sequence (0) | 2021.03.26 |