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 |