CHAPTER 3 액션과 계산, 데이터의 차이를 알기
일반적으로 코드에 액션이 너무 많이 사용되고 있는 반면에 계산은 거의 찾아보기 힘든 이유를 알수 있다
액션과 계산, 데이터
함수형 프로그래머는 액션 계산 데이터를 구분한다
문제에 대해 생각할 때
문제에 대해 고민하고 있을 때도 문제를 액션과 계산 데이터로 나눠 생각해 볼 수 있다
코딩할떄
함수형 프로그래머는 최대한 액션에서 계산을 빼내려고 한다
또 계산에서는 데이터를 분리할 수 있는지 생각한다
더 나아가 액션이 계산이 될수 있는지 계산이 데이터가 될수 있는지 생각한다
코드를 읽을 때
함수형 프로그래머는 더 좋은 코드를 만들기 위해 이미 있는 코드를 액션과 계산, 데이터로 리팩터링하는 방법을 찾을것이다
액션과 계산, 데이터는 어디에나 적용할 수 있습니다
냉장고 확인하기
냉장고를 확인하는 일은 시점이 중요하기 때문에 액션이다
냉장고가 가지고 있는 제품은 데이터이다
운전해서 상점으로 가기
운전해서 상점으로 가는 것은 복잡한 행동이고 시점이 중요하기 때문에 액션이다
사실 여기엔 데이터가 숨어 있다 상점 위치나 가는 경로
필요한 것 구입하기
구입하는 일도 확실히 액션이다 하지만 구입하기를 몇단계로 나눠 생각해보면 계산과 데이터로 나눠 생각할 수 있다
현재 재고(데이터) -> 필요한 재고(데이터) -> 재고 빼기(계산) -> 장보기 목록(데이터) -> 목록에 있는 것 구입하기(액션)
액션과 계산, 데이터를 더 명확하게 하기 위해 액션과 계산, 데이터에 해당하는 단계를 각각 다른 열에 그려서 선으로 연결해보면 어느정도 보인다
장보기 과정에서 배운 것
- 액션과 계산, 데이터는 어디에나 적용할수 있다
- 액션 안에는 계산과 데이터 또 다른 액션이 숨어 있을지도 모른다
- 계산은 더 작은 계산과 데이터로 나누고 연결할 수 있다
- 데이터는 데이터만 조합할 수 있다
- 계산은 때로 우리 머리속에서 일어난다
- 계산이 잘보이지 않는 이유는 계싼이 우리 사고 과정에 녹아 있어서
쿠폰 보내는 과정을 그려보기
데이터베이스에서 구독자를 가져오는 것부터 시작
이단계는 액션이다
데이터베이스에서 쿠폰 목록 가져오기
이것도 액션이다
한번 가져온 쿠폰목록은 데이터이다
보내야 할 이메일 목록 만들기
이메일 목록 계획하기에서 생성된 이메일 목록은 다음 단계에서 사용할 데이터이다
이메일 전송하기
이메일 전송은 간단하다 목록을 미리 만들어서 목록을 순회하면서 그냥 보내면 된다
이메일 만들는 부분 자세히 살펴보기
- 왜 계산을 만드냐?
- 가능한 계산을 사용하려고 하는 이유는 테스트하기 쉽기 때문
쿠폰 보내는 과정 구현하기
테이터베이스에서 가져온 구독자 데이터
데이터는 언어에서 제공하는 단순한 데이터 타입으로 표현한다. 언어에서 제공하는 데이터 타입은 알아보기 쉽고 사용하려고 하는 목적에도 잘 맞는다
쿠폰 등급은 문자열입니다
쿠폰 등급은 문자열로 표현한다 다른 타입을 써도 좋지만 문자열이 편하다
쿠폰 등급을 결정하는 것은 함수이다
계산은 함수로 구현된다. 입력값은 함수 인자이고 출력값은 함수의 리턴값이다
데이터베이스에서 가져온 쿠폰 데이터
자바스크립트 객체로 표현할수 있다
특정 등급의 쿠폰 목록을 선택하는 계산은 함수 입니다
특정 등급의 쿠폰 목록을 선택하는 계산도 함수로 구현
이메일은 그냥 데이터 입니다
데이터
구독자가 받을 이메일을 계획하는 계산
계산
보낼 이메일 목록 준비하기
계산
이메일 보내기는 액션
액션
일반적인 구현 순서
데이터 -> 계산 -> 액션
계산은 보통 순수 함수(pure function) 또는 수학 함수(mathematical function)로 부른다
이미 있는 코드에 함수형 사고 적용하기
액션은 코드 전체로 퍼집니다
액션은 사용하기 참 어렵다. 액션을 부는 함수가 있다면 그함수도 액션이된다. 이렇게 액션은 코드 전체로 퍼집니다
액션은 다양한 형태로 나타납니다
- 함수호출
- 메서드 호출
- 생성자
- 표현식
- 상태
액션은 보통 순수하지 않은 삼후(impure function) 또는 부수효과 함수(side effect function) 또는 부수효과가 있는 함수(function with side effect)라고 부른다