Scalaμμ Curryingμ μ¬λ¬ κ°μ νλΌλ―Έν°λ₯Ό λ°λ ν¨μ λμ , νλμ νλΌλ―Έν°λ§μ λ°λ ν¨μλ€μ μ°μλ‘ λ³ννλ κΈ°λ²μ λλ€. μ¦, λ€μ€ μΈμ ν¨μ(multi-argument function)λ₯Ό λ¨μΌ μΈμ ν¨μλ€μ μ°μλ‘ λΆλ¦¬νλ λ°©λ²μ λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μ λΆλΆ μ μ©(partial application)μ΄ κ°λ₯ν΄μ§κ³ , κ³ μ°¨ ν¨μλ‘ νμ©ν μ μμ΅λλ€.
μΌλ°μ μΈ λ 맀κ°λ³μλ₯Ό λ°λ ν¨μλ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€:
def add(a: Int, b: Int): Int = a + b
Curryingμ μ¬μ©νλ©΄ μ΄ ν¨μλ₯Ό λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€:
def add(a: Int)(b: Int): Int = a + b
μ΄ ν¨μλ λ κ°μ μΈμλ₯Ό λ λ²μ νΈμΆμ ν΅ν΄ μ²λ¦¬ν μ μμ΅λλ€. 첫 λ²μ§Έ νΈμΆμμ a
λ₯Ό, λ λ²μ§Έ νΈμΆμμ b
λ₯Ό λ°μ΅λλ€.
val add3 = add(3) _ // 첫 λ²μ§Έ μΈμμ 3μ μ μ©
val result = add3(5) // λ λ²μ§Έ μΈμμ 5λ₯Ό μ μ©
println(result) // μΆλ ₯: 8
μ μ½λμμ add(3)
μ λΆλΆμ μΌλ‘ μ μ©λ ν¨μλ‘, add3
λ μ΄μ νλμ μΈμλ§ λ°λ ν¨μκ° λ©λλ€. μ΄νμ add3(5)
λ₯Ό νΈμΆνλ©΄ κ²°κ³Όκ°μ΄ κ³μ°λ©λλ€.
μ¬κΈ°μ _
λ λΆλΆ μ μ©μ μλ―Ένλ©°, λ¨μ μΈμμ λν΄ λμ€μ κ°μ μ±μΈ μ μλ€λ λ»μ
λλ€.
Scalaμ Curryingμ μ¬μ©νλ©΄ ν¨μ νΈμΆμ μ μ°μ±μ λμ΄κ³ , μ½λμ μ¬μ¬μ©μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
Currying λ¬Έλ²μ νμ΄μ μ°λ©΄, κ²°κ΅ μ¬λ¬ κ°μ 맀κ°λ³μλ₯Ό λ°λ ν¨μλ₯Ό μ°μμ μΌλ‘ λ¨μΌ 맀κ°λ³μλ₯Ό λ°λ ν¨μλ€μ μ€μ²©λ ννλ‘ νννλ κ²κ³Ό κ°μ΅λλ€. μλ₯Ό λ€μ΄, def add(a: Int)(b: Int): Int = a + b
μ κ°μ 컀리 ν¨μλ μ€μ²©λ ν¨μλ₯Ό μ¬μ©νμ¬ λμΌν κΈ°λ₯μ μνν μ μμ΅λλ€.