개발 토크

[쏙쏙 들어오는 함수형 코딩] 액션과 계산, 데이터 - 2

chemi_ 2023. 7. 9. 23:05

https://www.yes24.com/Product/Goods/108748841

 

쏙쏙 들어오는 함수형 코딩 - YES24

소프트웨어의 복잡성을 다루기 위해 꼭 읽어야 할 책이 책은 함수형 사고를 통해 의도하지 않은 복잡성이 코드 전체로 퍼져나가는 것을 막고 프로그래밍을 간단하게 하는 법을 담았다. 시스템

www.yes24.com

책에 나와있는 그림과 글들이 이해하기 편한 방식으로 전개되어서 최대한 내용을 그대로 옮겼습니다. 모든 내용을 다 옮긴것은 아니고 핵심이라고 생각하는 부분들을 이해하기 편할 정도로 옮겼습니다. 책의 내용이 정말 좋으니 꼭 구매하셔서 읽으시길 강추드립니다.

 

https://mingwan.notion.site/2-148086723d0a406e9b890c71ed07b3c8?pvs=4

(노션으로 먼저 정리하고 블로그로 옮기기 때문에 노션이 더 보기 편할 수 있습니다)

Part 1. 액션과 계산, 데이터

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

액션과 계산, 데이터

함수형 프로그래머는 액션과 계산, 데이터를 구분합니다.

액션 계산 데이터
실행 시점과 횟수에 의존합니다.다른 말로 부수 효과, 부수 효과가 있는 함수, 순수하지 않은 함수라고 부르기도 합니다. 입력으로 출력을 계산합니다 다른 말고 순수 함수, 수학 함수라고 부르기도 합니다. 이벤트에 대한 사실
예) 이메일 보내기, 데이터베이스 읽기 예) 최댓값 찾기, 이메일 주소가 올바른지 확인하기 예) 사용자가 입력한 이메일 주소, 은행 API로 읽은 달러 수량

 

 

액션과 계산, 데이터는 어디에나 적용할 수 있습니다.

우리가 일상에서 자주 하는 장보기에 액션과 계산, 데이터를 적용해 봅시다.
함수형 프로그래머가 아닌 프로그래머가 장보기 과정을 그린다면 아래 그림처럼 그릴 수 있습니다. 각 단계가 액션과 계산, 데이터 중 어떤 종류에 속하는지 왼쪽에 표시해 보겠습니다.
액션은 호출 시점과 횟수에 의존합니다.

 

 

 

모든 것이 액션이라니! 뭔가 놓친 것이 있는 것 같습니다. 계산과 같이 데이터에 대해 알아봐야 할 것 같습니다.

 

모든 것을 액션으로 분류하면 안 될 것 같습니다. 물론 아주 단순한 과정은 액션으로만 분류할 수 있지만 위에서 살펴본 장보기 과정은 그렇게 단순하지 않습니다. 놓친 것이 있는지 단계별로 다시 살펴봅시다.

 

냉장고 확인하기

냉장고를 확인하는 일은 확인하는 시점이 중요하기 때문에 액션입니다. 냉장고에 가지고 있는 제품은 데이터입니다. 이것을 현재 재고라고 합시다.

냉장고를 확인하는 일은 확인하는 시점이 중요하기 때문에 액션입니다. 냉장고에 가지고 있는 제품은 데이터입니다. 이것을 현재 재고라고 합시다.

운전해서 상점으로 가기

운전해서 상점으로 가는 것은 복잡한 행동이고 명확히 액션입니다. 사실 여기에는 데이터가 숨어 있습니다. 상점 위치나 가는 경로는 데이터로 볼 수 있습니다. 하지만 우리가 할 일이 자율 주행 자동차를 만드는 것이 아니기 때문에 따로 분리하지 않겠습니다.

필요한 것 구입하기

구입하는 일도 확실히 액션입니다. 하지만 구입 과정은 몇 단계로 나눌 수 있습니다. 필요한 것을 구입하려면 필요한 것이 무엇인지 알아야 합니다. 필요한 것은 어떻게 알 수 있을까요? 어떻게 장을 볼지에 따라 다르겠지만 필요하지만 없는 제품의 목록을 만드는 것이 가장 쉽습니다.

필요한 재고 - 현재 재고 = 장보기 목록

 

앞에 ‘냉장고 확인하기’ 단계에서 만든 현재 재고 데이터를 사용했습니다. 이제 ‘필요한 것 구입하기’ 단계를 몇 단계로 더 나눌 수 있습니다.

 

 

운전해서 집으로 오기

운전해서 집으로 오는 단계도 더 나눌 수 있지만, 우리가 다루려고 하는 범위가 아니기 때문에 더 나누지 않겠습니다.

 

그럼 앞에 이야기한 내용을 반영해서 장보기 과정을 다시 정리해 봅시다.

 

액션과 계산, 데이터를 더 명확하게 하기 위해 액션과 계산, 데이터에 해당하는 단계를 각각 다른 열에 그려봅시다. 그리고 데이터는 액션과 계산의 입력과 출력으로 사용되기 때문에 선으로 연결해 봅시다. 이제 장보기 과정이 완성된 것 같습니다.

 

 

이렇게 반복하면 액션과 계산, 데이터를 더 많이 찾을 수 있고 풍부한 모델을 만들 수 있습니다.

 

예를 들어 ‘냉장고 확인하기’ 단계는 ‘냉장실 확인하기’ 단계와 ‘냉동실 확인하기’ 단계로 나눠 액션으로 만들 수 있습니다. 각 액션은 각각의 데이터를 만들 수 있고 연결할 수 있습니다. ‘목록에 있는 것 구입하기’ 단계도 ‘장바구니에 담기’와 ‘계산하기’ 단계로 나눌 수 있습니다.

 

계속 나누다 보면 점점 더 복잡해진다고 생각할 수 있습니다. 하지만 액션에 숨어 있는 다른 액션이나 계산 또는 데이터를 발견하기 위해 나눌 수 있는 만큼 나누는 것이 좋습니다.

 

장보기 과정에서 배운 것

  1. 액션과 계산, 데이터는 어디에나 적용할 수 있습니다.
    처음에는 액션과 계산, 데이터를 적용하기 어려울 수 있지만 연습을 할수록 더 잘할 수 있습니다.
  2. 액션 안에는 계산과 데이터, 또 다른 액션이 숨어 있을지도 모릅니다.
    단순해 보이는 액션도 또 다른 액션이나 계산, 데이터로 나눌 수 있습니다. 함수형 프로그래밍에서는 액션을 더 작은 액션과 계산, 데이터로 나누고 나누는 것을 언제 멈춰야 할지 아는 것이 중요합니다.
  3. 계산은 더 작은 계산과 데이터로 나누고 연결할 수 있습니다.
    장보기 과정에서는 이러한 예를 확인할 수 없었습니다. 하지만 ‘필요한 것 구입하기’ 단계에서 계산에 필요한 데이터를 찾았습니다. 계산을 더 작은 계산으로 나눌 수 있는 상황도 있습니다. 그리고 어떤 경우는 계산을 더 작은 계산으로 나누는 것이 더 좋을 때도 있습니다. 계산을 나누면 첫 번째 계산의 결과 데이터가 두 번째 계산의 입력이 됩니다.
  4. 데이터는 데이터만 조합할 수 있습니다.
    데이터는 다른 영향을 주지 않는 그냥 데이터입니다. 그래서 데이터 찾는 일을 먼저 해야 합니다. 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있습니다.
  5. 계산은 때로 ‘우리 머릿속에서’ 일어납니다.
    사실 계산 단계가 있지만 잘 보이지 않는 이유는 계산이 우리 사고 과정에 녹아있기 때문입니다.
    장을 보는 상황에서 무엇을 사야 할지는 그냥 머릿속에서 저절로 생각납니다. 현실에서 장을 보다가 갑자기 무엇을 사야 할지 앉아서 목록을 작성하지는 않습니다. 이처럼 계산은 머릿속에서 나도 모르게 일어납니다.
    하지만 이 사실을 알면 계산을 더 쉽게 찾을 수 있습니다. 어떤 단계에서 무엇인가 결정해야 할 것이 있는지 또는 무엇인가 계획해서 방법을 찾아야 할 것이 있는지 스스로에게 물어보면 됩니다. 결정과 계획은 계산이 될 가능성이 높기 때문입니다.