[C# 문법] 순수 함수란?

참조



함수형 프로그래밍이란?

  • 부수 효과를 제거하여 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임을 의미합니다.
    • 부수 효과 : 외부 상태를 변경하거나 함수로 들어온 인자의 상태를 직접 변경하는 것을 의미
    • 순수 함수 : 부수효과가 없는 함수.


순수함수란?

  • 함수형 프로그램의 함수 대다수는 부작용을 일으키지 않습니다.
  • 함수 내외서 외부의 어떠한 변수에도 변경을 가하지 않기 때문입니다.
  • 또한, 같은 입력 값에 대해 일관되게 항상 같은 값을 반환합니다.


순수 함수가 아닌 경우(부수 효과 함수)

다음은 순수 함수가 아닌 경우들 입니다.

  • 함수 내에서 외부와 연계하는 수단이 될 수 있는 전역 변수나 정적 변수를 변경하는 경우
  • 함수 내에서 전달받은 인자를 변경하는 경우
  • 예외를 일으키는 경우
  • 키보드 입력이나 화면 출력 등 입출력을 처리하는 경우


순수 함수가 아닌 예제 코드

  • 다음은 순수 함수가 아닌 예제 코드 입니다.
using System;

namespace interfaceTest
{
    class Program
    {
        private static string value = "First";

        static void Main(string[] args)
        {
            Space("Second");
            Space("Third");
            Space("Fourth");
            Space("Fifth");

            Console.WriteLine($"{value}");
        }

        public static void Space(string space)
        {
            value += ' ' + space;
        }
    }
}
First Second Third Fourth Fifth
  • 위의 예제 코드는 순수 함수가 아닙니다.
  • 전역 변수인 value는 Space 메서드 내에서 ' ' 공백 만큼 문자열이 연결되면서 변경이 이루어지고 있습니다.
  • 함수 외부의 변수인 value를 직접 수정하였기 때문에 비순수 함수 입니다.


순수 함수 예제 코드

  • 앞서 비순수 함수였던 예제코드를 순수 함수로 리팩토링하여 다시 작성해 보도록 하겠습니다.
using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string value1 = "First";
            string value2 = Space(value1, "Second");
            string value3 = Space(value2, "Third");
            string value4 = Space(value3, "Fourth");
            string value5 = Space(value4, "Fifth");
            Console.WriteLine($"{value5}");
        }

        public static string Space(string sourceString, string nextString)
        {
            return sourceString + ' ' + nextString;
        }
    }
}
First Second Third Fourth Fifth


순수 함수 장점

  • 순수함수는 신뢰성이 있기 때문에 추론하기 쉽습니다.
  • 유지보수 용이합니다.
  • 순수함수는 리팩토링에 유용하기 때문에 설계 변경에 유연하게 대처가 가능합니다.
  • 순수 함수는 쉽게 격리할 수 있어 테스팅과 디버깅에 유리합니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY