Home [함수형 프로그래밍] 2. 액션에서 계산 분리하기
Post
Cancel

[함수형 프로그래밍] 2. 액션에서 계산 분리하기

액션은 실행할 때마다 항상 같은 결과가 나옴이 보장되지 않는 동작입니다. 함수형 프로그래밍에서 액션과 계산을 분리하는 건 중요합니다. 왜냐하면 계산은 테스트하기 쉽고, 기계적인 분석이 쉽고, 조합하기 좋기 때문입니다. 계산은 함수형 프로그래밍에서 전문적인 용어로 순수 함수 또는 수학 함수라고 불리기도 합니다.

액션에서 계산을 분리하는 방법은 다음과 같습니다.

  1. 서브루틴 추출하기
  2. 암묵적 입력과 출력 찾기
  3. 암묵적 입력은 인자로 암묵적 출력은 리턴값으로 바꾸기

암묵적 입력의 예는 다음과 같습니다.

1
2
3
4
5
6
7
8
let num1 = 1
let num2 = 1
let result = 0

function DoSomething() {
	result = num1 + num2
	callApi(result)
}

위 함수에서 서브루틴을 추출해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
let num1 = 1
let num2 = 1
let result = 0

function DoSomething() {
  addNumbers()
	callApi(result)
}

function addNumbers() {
  result = num1 + num2
}

addNumbers는 액션입니다. num1과 num2를 더한 결과를 result에 저장합니다. 하지만 num1과 num2는 전역변수입니다. 전역변수를 읽는 것은 암묵적 입력입니다.

위 코드를 다음과 같이 바꿀 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
let num1 = 1
let num2 = 1
let result = 0

function DoSomething() {
  addNumbers()
	callApi(result)
}

function addNumbers(num1, num2) {
  result = num1 + num2
}

이렇게 하면 암묵적 입력을 없앨 수 있습니다. 그럼 다음으로 암묵적 출력을 없애봅시다. 암묵적 출력은 전역변수인 result를 바꾸는 부분입니다. addNumbers를 다음과 같이 바꿀 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
let num1 = 1
let num2 = 1
let result = 0

function DoSomething() {
  result = addNumbers()
	callApi(result)
}

function addNumbers(num1, num2) {
  return num1 + num2
}

이렇게 하면 암묵적 출력을 없앨 수 있습니다. 우리는 액션이었던 addNumbers를 계산으로 만들었습니다.

정리

이처럼 액션에서 계산을 분리하는 것은 함수형 프로그래밍에서 기본적인 개념 중 하나입니다. 함수형 프로그래밍에서는 코드의 가독성과 유지보수성을 높이기 위해 부수 효과(side effect)를 최소화하고, 불변성(Immutability)을 유지하는 것이 중요합니다. 액션에서 계산을 분리하는 것은 이러한 개념을 적용하기 위한 한 가지 방법입니다.

함수형 프로그래밍에서는 순수 함수(Pure Function)를 사용하여 부수 효과를 최소화하고, 불변성을 유지합니다. 불변성을 유지함으로써 코드의 안정성과 가독성이 높아지며, 디버깅이나 유지보수가 용이해집니다.

This post is licensed under CC BY 4.0 by the author.

[함수형 프로그래밍] 1. 액션, 계산, 데이터

[golang 비동기 패턴] Pipeline 패턴

Comments powered by Disqus.