프로시저(procedure) vs 순수함수(pure function)
c/c++로 시작한 입장에서 둘다 생소한 개념이다.
프로시저는 c/c++에서의 함수와 동일 하지만 이름이 다르기 때문에 혼동이 되었다.
c/c++을 공부/개발 해본 사람이라면 우리가
return_type function_name (argument)로 만들었던 함수 이다.
물론 c언어의 함수에서 순수함수를 구현할수 있다. 단지 c언어에서는 프로시저와 순수함수를 구분하지 않고 둘다 함수라는 큰 단위로 이해한다.
순수함수(pure function)은 수학의미하는 함수 이다. 정의역과 치역이 있고 일대일 대응하는 경우 우리는 함수하고 할수 있다.
이제부터 c언어의 함수를 프로시저로 순수함수를 함수 라고 표기하겠다.
프로시저는 항상 같은 값을 리턴하지 않는다. (side effect가 존재할 가능성이 있다)
예를 들어서
프로시저 a에서 글로벌 변수의 값을 변경하는 경우가 있다.
이를 다른 곳에서 a가 값을 변경하지 안았을 것이라고 가정하고 프로그램을 짠다면 문제가 생길수 있다.
ex)
global var g_var = original;
void a()
{
g_var = something;
}
main()
{
print(g_var); // original
a();
print(g_var); // something
}
사용자가 원하는 값이 original인데 프로시저a를 실행한 이후에는 something이라는 값이 들어가게 된다.
반면에 순수 함수에서는 side effect가 없다. 그리고 무조건 리턴 값이 있어야 한다. 때문에
어떤 함수a를 정의하고 아무리 호출해서 함수a가 리턴하는 값을 인자에 의해서만 결정된다.
그리고 다른 부분에 영향을 주지도 않는다. 그렇기 때문에 버그를 줄이는 것이 가능하다.
단 제약조건이 생기기 때문에 프로그래밍하기가 까다롭다.
보통 c/c++ , python 개발자 라면 일단 개발을 한뒤에 디버깅 툴을 이용해서 버그를 잡아 내는 것에 익숙하기 때문에 함수형 언어로 개발 하는 것이 힘들 것이다.
댓글
댓글 쓰기