[C# 함수형 프로그래밍] C# 커링, 논커링

참조



C# 커링이란?

  • 커링(currying) 이란 다중 인수를 갖는 함수를 단일 인수를 갖는 함수들의 함수열로 바꾸는 것을 의미합니다.
  • 즉, 커링을 사용하는 목적은 여러 개의 인수를 가지는 함수를 인수의 일부를 담당하는 일련의 함수들로 나누고자 함에 있습니다.
  • 필요한 개수보다 적은 인수를 함수에 전달하면 원래 함수의 전체 기능을 완수하기 위해 쪼개진 함수 가운데 다음 함수를 호출해야 한다는 것입니다.
  • 그럼 실제 예제를 통해서 C#에서 논커링, 커링 함수들이 무엇인지 예제 코드를 통해서 살펴 보겠습니다.


논커링 예제코드

using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int add = NonCurriedAdd(5, 6);
            Console.WriteLine($"add value = {add}");
        }

        static int NonCurriedAdd(int a, int b)
        {
            return a + b;
        }
    }
}
  • 위와 같은 함수는 우리가 평소에 자주 접하는 함수입니다.
  • 이제 위의 함수 내용을 커링 함수로 바꿔서 작성해 보도록 하겠습니다.


커링 예제코드

using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var add = CurriedAddFunction(5);

            int number = add(6);
            Console.WriteLine($"add value = {number}");
        }

        static Func<int, int> CurriedAddFunction(int a) => b => a + b;
    }
}
  • Func 대리자를 이용해서 CurriedAddFunction 메서드를 생성하였습니다.
  • 논커링, 커링 메서드를 실행해 결과 값을 비교하면 모두 11 이라는 값으로 결과는 완벽히 일치하는 것을 확인할 수 있습니다.
728x90

이 글을 공유하기

댓글(2)

  • 2021.12.03 20:50 신고

    c#포스팅 해주심에 적지않은 도움이 되고있습니다. 눈팅만하다 질문합니다.
    커링은 어떻게 활용하고 계신지 본인의 의견을 여쭤봐도 될까요?
    저는 linq에 너무 익숙해져서 그런지 제대로 활용할 방도가 쉽사리 떠오르지 않네요.

    • 2021.12.03 22:44 신고

      저도 최근에 이제 막 함수형 프로그래밍에 대해서 공부를 하고 있어서 실제 실무에서 현재로서, 커링을 직접적으로 사용하지는 않고 있었습니다! 저 또한 Linq를 주로 사용을 해왔는데 onebot 님 질문을 통해 현재 제가 하고 있는 프로젝트에서 어떤 경우에 커링을 활용해야 하는지에 대해서 한번 깊이 고민해 보고, 괜찮은 생각이 떠오르면 다시 답글을 남기도록 하겠습니다! 당장 질문에 대한 답변을 드리지 못해 죄송합니다. 아이디어가 떠오르는대로 정리해서 다시 답글 달겠습니다! 고민할 수 있게 질문 남겨 주셔서 감사합니다!ㅎㅎ

Designed by JB FACTORY