[python] 커링과 부분 적용에 대해 설명해주세요.

커링(currying)과 부분 적용(partial application)은 함수형 프로그래밍에서 중요한 개념입니다. 이들은 함수를 보다 유연하고 강력하게 활용하기 위한 기법들로써, 코드의 재사용성과 가독성을 높일 수 있습니다.

커링 (Currying)

커링은 함수를 여러 개의 인수를 받는 함수로 분리하는 작업을 말합니다. 기존의 함수를 커링된 형태로 변환하면, 호출하는 순간에 전달해야 할 인수의 개수에 상관없이 인수 하나만을 받는 새로운 함수를 반환하게 됩니다.

def add(x):
    return lambda y: x + y

add(5)(3)

위의 예시에서 add(5)를 호출하면 y의 값을 받는 함수를 반환합니다. 이후에 add(5)(3)을 호출하면 xy를 더한 결과인 8을 반환합니다.

커링은 함수의 재사용성을 높이고, 함수의 응용 및 조합을 용이하게 해줍니다. 또한, 일부 인수를 고정하고 나머지 일부만 변경하여 새로운 함수를 만들어내는 것도 가능합니다.

부분 적용 (Partial Application)

부분 적용은 함수의 일부 인수를 고정하여 새로운 함수를 만드는 기법입니다. 커링과 비슷한 개념이지만, 커링은 인수를 하나씩 받는 반면에 부분 적용은 여러 개의 인수를 동시에 고정할 수 있습니다.

def multiply(x, y):
    return x * y

double = multiply(2, _)  # _는 고정되지 않은 인수를 나타냅니다.

double(5)  # 10

위의 예시에서 multiply(2, _)는 첫 번째 인수를 2로 고정한 새로운 함수를 반환합니다. 이후에 double(5)를 호출하면 25를 곱한 결과인 10을 반환합니다.

부분 적용은 미리 정해진 일부 인수를 고정하여 함수를 축약하고, 재사용성을 높일 수 있습니다. 이는 함수의 인수의 일부만을 고려하는 새로운 함수를 만들어내는 것을 가능하게 해줍니다.

커링과 부분 적용의 장점

커링과 부분 적용은 다음과 같은 장점을 가지고 있습니다.

  1. 코드 재사용성: 커링과 부분 적용을 통해 함수를 단순화시키고 공통 로직을 재사용할 수 있습니다.
  2. 가독성: 커링과 부분 적용을 활용하면 함수를 호출하는 순간에 인수의 의미를 명확하게 전달할 수 있습니다.
  3. 함수 조합: 커링과 부분 적용을 활용하여 함수를 조합하고 새로운 함수를 만들어내는 것이 용이합니다.

커링과 부분 적용은 함수형 프로그래밍 패러다임에서 많이 사용되는 기법들입니다. 이를 활용하여 코드를 더욱 간결하고 유연하게 작성할 수 있습니다.

참고 자료