[C# 문법] 순수 함수란?
- C#/C# 문법
- 2021. 11. 29. 21:39
참조
- C#으로 배우는 함수형 프로그래밍
- https://2ssue.github.io/common_questions_for_Web_Developer/docs/Programming/pure_function.html
함수형 프로그래밍이란?
- 부수 효과를 제거하여 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임을 의미합니다.
- 부수 효과 : 외부 상태를 변경하거나 함수로 들어온 인자의 상태를 직접 변경하는 것을 의미
- 순수 함수 : 부수효과가 없는 함수.
순수함수란?
- 함수형 프로그램의 함수 대다수는 부작용을 일으키지 않습니다.
- 함수 내외서 외부의 어떠한 변수에도 변경을 가하지 않기 때문입니다.
- 또한, 같은 입력 값에 대해 일관되게 항상 같은 값을 반환합니다.
순수 함수가 아닌 경우(부수 효과 함수)
다음은 순수 함수가 아닌 경우들 입니다.
- 함수 내에서 외부와 연계하는 수단이 될 수 있는 전역 변수나 정적 변수를 변경하는 경우
- 함수 내에서 전달받은 인자를 변경하는 경우
- 예외를 일으키는 경우
- 키보드 입력이나 화면 출력 등 입출력을 처리하는 경우
순수 함수가 아닌 예제 코드
- 다음은 순수 함수가 아닌 예제 코드 입니다.
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
'C# > C# 문법' 카테고리의 다른 글
[C# 함수형 프로그래밍] C# 커링, 논커링 (2) | 2021.12.01 |
---|---|
[C# 문법] C# ValueTuple (0) | 2021.12.01 |
[C# 문법] C# 인터페이스 (0) | 2021.11.29 |
[C# 문법] Reflection - Class Property 개수 확인 및 반복문 사용하기 (0) | 2021.11.24 |
[C# 문법] C# 어셈블리 버전 구하는 방법 (0) | 2021.11.14 |
이 글을 공유하기