액션과 계산, 데이터의 차이를 알기
장보기 과정을 통해서 액션과 계산, 데이터를 구분지어 봅시다.
일단 장보기 과정은 다음과 같이 리스트화할 수 있습니다.
- 냉장고 확인하기
- 운전해서 상점으로 가기
- 필요한 것 구입하기
- 운전해서 집으로 오기
하나씩 곱씹어보며 구분지어 보도록 하겠습니다.
냉장고 확인하기는 시점에 따라 냉장고를 확인하는 시점에 따라 냉장고에 있는 제품이 다르기 때문에 액션입니다.
이때, 냉장고에 있는 제품들은 데이터라고 할 수 있습니다.
운전해서 상점으로 가기는 몇 번 운전해서 상점으로 갔는지에 따라 소비된 연료량이 다릅니다. 즉, 외부에 영향을 주는 행동이므로 액션입니다.
이 때, 상점 위치나 가는 경로 자체는 데이터라고 볼 수 있습니다.
구입하는 것도 액션입니다. 브로콜리를 사려고 했는데, 브로콜리가 다 팔렸으면 구입할 수 없기 때문에 구입 시점이 중요합니다.
이 때, 구입할 데이터(장보기 목록)은 데이터이며, 구입할 목록을 구하기 위해서는 필요한 재고 - 현재 재고 라는 수식을 통해 구합니다.
즉, 필요한 재고 - 현재 재고는 계산입니다. 어떤 것을 결정, 계획하는 일은 보통 계산일 경우가 많습니다.
운전해서 집으로 오는 것도 액션입니다. 시점에 따라 내가 상점에 있을 수도 있고 아닐 수도 있기 때문에 액션입니다.
이런 식으로 큰 틀을 생각하고, 각각을 보면 복잡해지지만 액션에 숨어 있는 다른 액션이나 계산, 데이터를 발견할 때마다 나누는 것이 함수형 프로그래밍에서 중요합니다.
함수형 프로그래밍에서 중요한 기술은 데이터를 쉽게 해석할 수 있도록 표현하는 것입니다. 왜냐하면 해석하지 않은 데이터는 그저 바이트에 불과한 숫자값일 뿐이기 때문입니다.
계산과 액션은 비슷해보이는데 다릅니다.
계산을 쓰게 된다면 액션에 비해 다음과 같은 사항을 신경쓰지 않아도 됩니다.
- 동시에 실행되는 것
- 과거에 실행되었던 것이나 미래에 실행할 것
- 실행 횟수
그리고, 액션은 다루기 매우 힘듭니다. 다음과 같은 코드가 있다고 가정해봅시다.
function doA(param1){
if(특정한 조건){
doAction(param1);
}
}
function doB(){
const a = 데이터를가져옴();
doA(a)
}
`doAction`를 호출하는 코드만 액션이라고 생각할 수 있지만 이를 호출하는 `doA`함수도 액션이고, `doA`함수를 호출하는 `doB`함수도 액션입니다.
하지만 저희는 소프트웨어를 개발하면서 액션을 사용하지 않을 방법은 존재하지 않습니다. 다만, 함수형 프로그래밍에서 액션을 특히나 강조하는 이유는 저희는 액션을 관리하는 방법을 배우는 것이 함수형 프로그래밍의 목적이기 때문입니다.