Currying 문법 μ •μ˜

Scalaμ—μ„œ Currying은 μ—¬λŸ¬ 개의 νŒŒλΌλ―Έν„°λ₯Ό λ°›λŠ” ν•¨μˆ˜ λŒ€μ‹ , ν•˜λ‚˜μ˜ νŒŒλΌλ―Έν„°λ§Œμ„ λ°›λŠ” ν•¨μˆ˜λ“€μ˜ μ—°μ‡„λ‘œ λ³€ν™˜ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€. 즉, 닀쀑 인수 ν•¨μˆ˜(multi-argument function)λ₯Ό 단일 인수 ν•¨μˆ˜λ“€μ˜ μ—°μ‡„λ‘œ λΆ„λ¦¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 ν•¨μˆ˜ λΆ€λΆ„ 적용(partial application)이 κ°€λŠ₯해지고, κ³ μ°¨ ν•¨μˆ˜λ‘œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Currying ν•¨μˆ˜ μ˜ˆμ‹œ

일반적인 두 λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

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 문법을 ν’€μ–΄μ„œ μ“°κΈ°

Currying 문법을 ν’€μ–΄μ„œ μ“°λ©΄, κ²°κ΅­ μ—¬λŸ¬ 개의 λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” ν•¨μˆ˜λ₯Ό μ—°μ†μ μœΌλ‘œ 단일 λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” ν•¨μˆ˜λ“€μ˜ μ€‘μ²©λœ ν˜•νƒœλ‘œ ν‘œν˜„ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, def add(a: Int)(b: Int): Int = a + b와 같은 컀리 ν•¨μˆ˜λŠ” μ€‘μ²©λœ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Currying을 ν’€μ–΄μ„œ μ“΄ μ½”λ“œ