쏙쏙 들어오는 함수형 코딩 Chapter 03

액션과 계산, 데이터의 차이를 알기

 

장보기 과정을 통해서 액션과 계산, 데이터를 구분지어 봅시다.

 

일단 장보기 과정은 다음과 같이 리스트화할 수 있습니다.

  1. 냉장고 확인하기
  2. 운전해서 상점으로 가기
  3. 필요한 것 구입하기
  4. 운전해서 집으로 오기

하나씩 곱씹어보며 구분지어 보도록 하겠습니다.

냉장고 확인하기는 시점에 따라 냉장고를 확인하는 시점에 따라 냉장고에 있는 제품이 다르기 때문에 액션입니다.

이때, 냉장고에 있는 제품들은 데이터라고 할 수 있습니다.

운전해서 상점으로 가기몇 번 운전해서 상점으로 갔는지에 따라 소비된 연료량이 다릅니다. 즉, 외부에 영향을 주는 행동이므로 액션입니다.

이 때, 상점 위치나 가는 경로 자체는 데이터라고 볼 수 있습니다.

구입하는 것도 액션입니다. 브로콜리를 사려고 했는데, 브로콜리가 다 팔렸으면 구입할 수 없기 때문에 구입 시점이 중요합니다.

이 때, 구입할 데이터(장보기 목록)은 데이터이며, 구입할 목록을 구하기 위해서는 필요한 재고 - 현재 재고 라는 수식을 통해 구합니다.

즉, 필요한 재고 - 현재 재고는 계산입니다. 어떤 것을 결정, 계획하는 일은 보통 계산일 경우가 많습니다.

운전해서 집으로 오는 것도 액션입니다. 시점에 따라 내가 상점에 있을 수도 있고 아닐 수도 있기 때문에 액션입니다.

 

이런 식으로 큰 틀을 생각하고, 각각을 보면 복잡해지지만 액션에 숨어 있는 다른 액션이나 계산, 데이터를 발견할 때마다 나누는 것이 함수형 프로그래밍에서 중요합니다. 

 

함수형 프로그래밍에서 중요한 기술은 데이터를 쉽게 해석할 수 있도록 표현하는 것입니다. 왜냐하면 해석하지 않은 데이터는 그저 바이트에 불과한 숫자값일 뿐이기 때문입니다.

 

계산과 액션은 비슷해보이는데 다릅니다.

계산을 쓰게 된다면 액션에 비해 다음과 같은 사항을 신경쓰지 않아도 됩니다.

  1. 동시에 실행되는 것
  2. 과거에 실행되었던 것이나 미래에 실행할 것
  3. 실행 횟수

그리고, 액션은 다루기 매우 힘듭니다. 다음과 같은 코드가 있다고 가정해봅시다.

function doA(param1){
  if(특정한 조건){
    doAction(param1);
  }
}

function doB(){
  const a = 데이터를가져옴();
  doA(a)
}

`doAction`를 호출하는 코드만 액션이라고 생각할 수 있지만 이를 호출하는 `doA`함수도 액션이고, `doA`함수를 호출하는 `doB`함수도 액션입니다. 

하지만 저희는 소프트웨어를 개발하면서 액션을 사용하지 않을 방법은 존재하지 않습니다. 다만, 함수형 프로그래밍에서 액션을 특히나 강조하는 이유는 저희는 액션을 관리하는 방법을 배우는 것이 함수형 프로그래밍의 목적이기 때문입니다.