-
[Kotlin] Functional ProgrammingAndroid/Kotlin 2021. 8. 11. 22:41λ°μν
- μ΄ κΈμ "μ€μ¬μ±μ Google 곡μ μΈμ΄ Kotlin" κ°μλ₯Ό λ£κ³ 곡λΆν λ΄μ©μΌλ‘ μμ±νμμ΅λλ€.
ν¨μν νλ‘κ·Έλλ°
Javaλ κ°μ²΄μ§ν₯ μΈμ΄λ‘ ν΄λμ€λ₯Ό μ€κ³νκ³ λ©μ€λλ₯Ό μ μν ν μΈμ€ν΄μ€λ₯Ό ν΅ν΄μ λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€.
Kotlinμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°λ μ§μνκ³ ν¨μν νλ‘κ·Έλλ°λ μ§μνμ¬ ν΄λμ€κΉμ§ μμ±ν νμμμ΄ ν¨μλ§ λ§λ€μ΄μ μ¬μ©νλ κ²μ μ§μν©λλ€.
μλ₯Ό λ€μ΄, Javaμμ ν¨μ μ μ μ λ΄λΆ νλΌλ―Έν°λ‘ μΈν°νμ΄μ€κ° νμν κ²½μ°μ μΈν°νμ΄μ€ ꡬν체λ₯Ό μ μν ν λμ νμ¬ νΈμΆν΄μΌ ν©λλ€. νμ§λ§ Kotlin κ°μ κ²½μ° ν¨μνμ μ§μνκΈ° λλ¬Έμ νλΌλ―Έν°μ ν¨μκ° λ€μ΄κ° μ μκ² λμ΄ νΈλ¦¬νκ² μ¬μ©ν μ μμ΅λλ€.
μ΄μΈμλ Kotlinμμλ ν¨μ μ¬μ©νκΈ°μ λ³΄λ€ νΈλ¦¬ν κ°λ λ€μ΄ μ‘΄μ¬ν©λλ€.
λλ€μ
fun main(){ var lambda1 = {a1: Int, a2:Int -> a1+a2 } val lambda2 = { print("hello world") } }
- λ€μκ³Ό κ°μ΄ λλ€μμ μ μν μ μκ³ , Return Typeμ λ§μ§λ§μ νμνλ©΄ λ©λλ€.
- lambda1μ λ κ°μ§μ Intν λ³μλ₯Ό λ°μ λ§μ ν 리ν΄νλ ν¨μλ‘ νμ μ (Int, Int) -> Int κ° λ©λλ€.
- lambda2λ 맀κ°λ³μ μμ΄ μΆλ ₯λ§ νλ ν¨μλ‘ νμ μ () -> Unit μ λλ€.
Inline ν¨μ
Kotlin μ½λκ° Java μ½λλ‘ λ³νλ λ ν¨μ νΈμΆνλ μ½λκ° νΈμΆν κ³³μ μ§μ ꡬνν μ½λλ‘ λ³κ²½νλ ν¨μμ λλ€.
ν¨μλ₯Ό μ μνλ μ΄μ λ λ°λ³΅λ μ½λκ° μ‘΄μ¬ν μ μ½λμμ μ€μ΄κ³ μμ°μ±μ λμ΄κΈ° μν΄ μ¬μ©ν©λλ€. λ©λͺ¨λ¦¬ ꡬ쑰μμ Code 곡κ°μ λ μ κ² μ°¨μ§νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬ μΈ‘λ©΄μ μ΄μ μ μμ§λ§, ν¨μ νΈμΆνκ³ λ€μ λ°νλλ κ³Όμ μ΄ ν¬ν¨λμ΄ μμ λ μ체λ λμ΄λκ² λ©λλ€.
Inline ν¨μλ ν¨μ λ΄λΆμ μ§μ μ½λκ° κ΅¬νλκΈ° λλ¬Έμ λ©λͺ¨λ¦¬λ λ λ§μ΄ μ¬μ©νμ§λ§ μ½λ νλ¦μ΄ κ³μ μ μ§λκΈ° λλ¬Έμ μμ λμ λμ΄λμ§ μμ΅λλ€.
κ²μμ κ³μμλ λ©λͺ¨λ¦¬μ μ¦κ°λ³΄λ¨ CPU μ±λ₯μ΄ μ΅μ°μ μ΄κΈ° λλ¬Έμ λ§μ΄ μ¬μ©νκΈ°λ ν©λλ€.
fun main(){ testfunc1() } fun testfunc1(){ println("testfunc1") }
public final class MainKt { public static final void main() { testfunc1(); } // $FF: synthetic method public static void main(String[] var0) { main(); } public static final void testfunc1() { String var0 = "testfunc1"; boolean var1 = false; System.out.println(var0); } }
- μμ μλ kotlin νμΌμ Javaμ½λλ‘ Decompileν κ²°κ³Όμ λλ€.
- testfunc1μ λ¨μν ν¨μλ‘ μ μνμκΈ° λλ¬Έμ Java μ½λμμλ λμΌνκ² μκΈ°κ³ mainν¨μμμ νΈμΆνλ κ²μ νμΈν μ μμ΅λλ€.
fun main(){ testfunc1() } inline fun testfunc1(){ println("testfunc1") }
public final class MainKt { public static final void main() { int $i$f$testfunc1 = false; String var1 = "testfunc1"; boolean var2 = false; System.out.println(var1); } // $FF: synthetic method public static void main(String[] var0) { main(); } public static final void testfunc1() { int $i$f$testfunc1 = 0; String var1 = "testfunc1"; boolean var2 = false; System.out.println(var1); } }
- Inline ν¨μλ‘ λ°κΎΈλ©΄ κΈ°μ‘΄κ³Ό λ€λ₯΄κ² testfun1μ μλ ν¨μκ° μ§μ mainμμ νΈμΆλλ κ²μ νμΈν μ μμ΅λλ€.
Extension ν¨μ
μλλ‘μ΄λ κ°λ° μμ μλλ‘μ΄λ μ»΄ν¬λνΈμ Dependencyν ν΄λμ€κ° μ‘΄μ¬ν©λλ€. μ΄ κ°μ ν΄λμ€λ λ³κ²½ν μκ° μλλ° Koltinμ Extension ν¨μλ₯Ό μ¬μ©νλ©΄ κΈ°μ‘΄ ν΄λμ€μ μλ‘μ΄ ν¨μκ° μΆκ°λ κ²μ²λΌ μ¬μ©ν μ μμ΅λλ€.
Extension ν¨μκ° κΈ°μ‘΄ ν΄λμ€μ μλ‘μ΄ ν¨μκ° μΆκ°λ κ²μ²λΌ 보μ΄μ§λ§ μ νν μ리λ ν΄λμ€μ 맀κ°λ³μλ‘ λ°λ ν¨μκ° λ§λ€μ΄μ§κ³ κ·Έ ν¨μλ₯Ό νΈμΆνλ λ°©μμΌλ‘ λμνκ² λ©λλ€.
fun main(){ var str1 = "abcd" println(str1.getUpperString()) } fun String.getUpperString(): String{ return this.getUpperString() }
public final class MainKt { public static final void main() { String str1 = "abcd"; String var1 = getUpperString(str1); boolean var2 = false; System.out.println(var1); } // $FF: synthetic method public static void main(String[] var0) { main(); } @NotNull public static final String getUpperString(@NotNull String $this$getUpperString) { Intrinsics.checkParameterIsNotNull($this$getUpperString, "$this$getUpperString"); return getUpperString($this$getUpperString); } }
javaλ‘ Decompileλ κ²°κ³Όλ₯Ό νμΈν΄λ³΄λ©΄ mainν¨μμλ getUpperStringμ νΈμΆνκ² λ©λλ€.
getUpperStringμ String ν΄λμ€μ μ μλ κ²μ΄ μλ str1μ 맀κ°λ³μλ‘ λ§λ ν¨μκ° μ μλκ³ νΈμΆνλ λ°©μμΌλ‘ μ¬μ©λ©λλ€.
κ³ μ°¨ ν¨μ
ν¨μλ₯Ό 맀κ°λ³μλ‘ λ°κ±°λ, λ¦¬ν΄ νμ μ΄ ν¨μμΈ ν¨μλ₯Ό κ³ μ°¨ν¨μλΌκ³ ν©λλ€.
ν¨μ νΈμΆ μ μ λ¬λλ ν¨μλ λ°ν ν¨μλ₯Ό λλ€μμΌλ‘ μ¬μ©ν μλ μμ΅λλ€.
fun main(){ var a1 = 10 var a2 = 20 var r = highfunction(a1, a2, { a1:Int, a2:Int -> a1+a2}) print(r) var r2 = highfunction(a1, a2){ m1,m2 -> m1+m2 } println(r2) } fun highfunction(a1: Int, a2: Int, func:(Int,Int) -> Int) : Int { return func(a1, a2) }
- λ€μκ³Ό κ°μ΄ κ³ μ°¨ν¨μλ₯Ό μ μνκ³ λλ€μμ ν΅ν΄ νΈμΆνμμ΅λλ€.
- Kotlinμμ κ³ μ°¨ν¨μλ₯Ό μ¬μ©ν λ νΉμ§μ΄ νλ μλλ° κ³ μ°¨ν¨μμ 맀κ°λ³μμμ λ§μ§λ§μ ν¨μλ₯Ό λμ νλ κ²μΌλ‘ μ μκ° λμ΄ μλ€λ©΄, var r2 λ³μλ₯Ό μ§μ νλ―μ΄ μ€κ΄νΈλ₯Ό μλ‘ μ΄μ΄μ λμ ν μ μμ΅λλ€.
- μ΄λ κ² ν μ΄μ κ° λλ€μμΌλ‘ μ μν λ λλ€μμ΄ κΈΈκ² λ κ²½μ° μλλ‘ λ΄λ¦¬λ κ²μ μ§μνκΈ° μν΄μλΌκ³ ν©λλ€.
λ°μν'Android > Kotlin' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Kotlin] String μ¬μ©λ² (0) 2021.08.12 [Kotlin] Array μ¬μ©λ² (0) 2021.08.12 [Kotlin] Generic, Inner ν΄λμ€ (0) 2021.07.07 [Kotlin] Companion Object λ? (0) 2021.07.05 [Kotlin] μ κ·Όμ νμ, property, get(), set() (0) 2021.07.05