[C#] 순수 함수

c# 2023. 1. 4. 13:52
728x90

순수 함수는 일반적으로 함수형 프로그래밍에서 사용하고 리펙터링 된다

순수 함수의 이점

  • 가독성과 유지 관리의 편의성이 향상된다 / 함수는 외부 상태에 의존하지 않는다
  • 반복되는 개발이 쉬워진다 / 코드를 리팩터링하기 쉬워서 디자인 변경 사항을 구현하기가 더욱 쉽다
  • 테스트와 디버깅이 더 쉽다 / 순수 함수를 분리하여 더 용이하게 테스트할 수 있기 때문에 테스트 코드를 작성하기 용이하다
  • 의도하지 않은 결과를 발생시키지 않는다 / 함수는 함수 외부의 모든 형식의 변수 또는 데이터를 변경하지 않는다
  • 일관성이 있다 / 동일한 입력 데이터의 집합이 제공되는 경우 항상 동일한 출력 값을 반환한다

 

함수형 프로그래밍으로 전환하는 한 가지 방법은 기존 코드를 리팩터링하여 의도하지 않은 불필요한 결과와 외부 종속성을 없애는 것이다. 이런 식으로 기존 코드의 순수 함수 버전을 만들 수 있다

 

변경되는 순수하지 않은 함수 예제

HyphenatedConcat 정적 클래스 멤버를 수정하기 때문에 순수하지 않은 함수

public class Program
{
    private static string aMember = "StringOne";

    public static void HyphenatedConcat(string appendStr)
    {
        aMember += '-' + appendStr;
    }

    public static void Main()
    {
        HyphenatedConcat("StringTwo");
        Console.WriteLine(aMember);
    }
}

 

매개 변수의 내용을 수정(Append) 하기 때문에 순수하지 않는 함수 

public class Program
{
    public static void HyphenatedConcat(StringBuilder sb, String appendStr)
    {
        sb.Append('-' + appendStr);
    }

    public static void Main()
    {
        StringBuilder sb1 = new StringBuilder("StringOne");
        HyphenatedConcat(sb1, "StringTwo");
        Console.WriteLine(sb1);
    }
}

 

순수 함수 예제

HyphenatedConcat 함수를 순수 함수로 리팩터링

class Program
{
	public static string HyphenatedConcat(string s, string appendStr)
    {
    	return( s+ '-' + appendStr);
    }
    
    public static void Main(string[] args)
    {
    	string s1 = "StringOne";
        string s2 = HyphenatedConcat(s1, "StringTwo");
        Console.WriteLine(s2);
    }
}

 

동일한 출력값

 

728x90

'c#' 카테고리의 다른 글

[C#] 덕타이핑과 dynamic  (0) 2023.01.06
[C#] Interface  (0) 2023.01.05
[C#] 함수형 프로그래밍  (0) 2023.01.04
[C#] await 연산자  (0) 2023.01.04
[C#] operator-overloading 연산자 오버로드  (0) 2023.01.04
Posted by 바르마스
,