1. 데이터

이벤트에 대한 사실입니다. 일어난 일에 결과를 기록한 것입니다.

❓ 데이터는 어떻게 구현하나요?

자바스크립트 저는 기본 데이터 타입으로 구현합니다. 숫자나 문자, 배열, 객체 같은 것입니다. 다른 언어에서는 더 정교한 방법으로 데이터를 만들 수 있습니다. 하스켈 새로운 데이터 타입을 정리 해 도메인을 표현합니다.

❓ 데이터에 어떻게 의미를 담을 수 있나요?

데이터 구조로 의미를 담을 수 있습니다. 예를 들어 목록에 순서가 중요하다면 순서를 보장하는 데이터 구조를 사용하면 됩니다. 데이터 구조로 도메인을 표현할 수 있습니다.

🔵 불변성

함수형 프로그래머는 불변 데이터구조를 만들기 위해 2가지 원칙을 사용합니다.

1. 카피-온-라이트: 변경할때 복사 본을 만듭니다
2. 방어적 복사: 보관하려고 하는 데이터에 복사본을 만듭니다

🔵 예시

  • 구입하려는 음식 목록
  • 이름
  • 전화번호
  • 음식 조리

🔵 장점

역설적으로 데이터는 데이터 자체로 할 수 있는 곳이 없기 때문에 줬습니다. 그래서 데이터 데이터 그대로 이해할 수 있습니다.

1. 직렬화 - 직렬화된 액션과 계산은 다른 곳에서 잘 작동 할 것이라는 보장이 없습니다. 하지만 진열하는 데이터는 전송하거나 디스크에 저장 했다가 읽기 싶습니다. 여러분에 데이터 오랫동안 잘 사용 되나요? 저는 자신있게 말할 수 없지만 함수 보다는 오래 사용하고 있는 것 같습니다.
2. 동일성 비교 - 계산이나 액션은 서로 비교 하기 어렵습니다. 하지만 데이터는 비교하기 싶습니다.
3. 자유로운 해석 -  데이터는 여러 가지 방법으로 해석할 수 있습니다. 접속 로그는 문제 해결을 위해 사용할 수 있지만 모니터링을 위해 사용할 수도 있습니다.

🔵 단점

유연하게 해석할 수 있다는 점은 장점이지만 해석이 반드시 필요하다는 점 단점 입니다. 계산은 해석 하지 않아도 실행할 수 있습니다. 하지만 해석 하지 않은 데이터는 쓸모 없는 바이트 일 뿐입니다.

2. 계산

계산은 입력값으로 출력값을 만드는 것입니다. 실행 시점과 횟수에 관계없이 같은 입력값에 대해 항상 같은 결과값을 내놓습니다. 보통은 순수 함수 혹은 수학 함수라고 부릅니다. 단 이 책에서는 언어 기능과의 혼동을 피하기 위해 계산이라고 부릅니다.

❓ 계산은 어떻게 구현하나요?

계산은 함수로 표현합니다.

❓ 어떻게 계산에 의미를 담을 수 있나요?

계산에는 연산을 담을 수 있습니다. 계산은 입력값을 출력값으로 만드는 것을 표현합니다. 계산을 언제 사용할지 또는 어떻게 사용할지는 때에 따라 다릅니다.

❓ 왜 액션보다 계산이 좋나요?

  1. 테스트 하기 쉽습니다. 계산은 언제 어디서나 (로컬 장비, 필드 서버, 테스트 장비)원하는 만큼 테스트를 실행할 수 있습니다.

  2. 기계적인 분석이 쉽습니다. 학술연구의 정적분적이라는 것이 있습니다. 정적분 속에서 자동화 된 분석은 중요합니다.

  3. 계산은 조합 하기 좋습니다. 계산을 조합해 더 큰 계산을 만들 수 있습니다. 이때 일급 계산을 사용합니다.

🔵 예시

  • 더하기나 곱하기
  • 문자열 합치기
  • 쇼핑 계획하기

🔵 단점

계산과 액션은 실행하기 전에 어떤 일이 발생 할지 알 수 없다는 단점이 있습니다. 물론 코드를 읽으면 예상할 수 있긴 합니다. 하지만 소프트웨어 측면에서 함수는 블랙박스 입니다. 입력값으로 실행해야 결과를 알 수 있습니다. 이런 단점이 싫다면 개선이나 액션 대신 데이터를 사용합니다.

3. 액션

액션은 외부세계 영향을 주거나 받는 것을 말합니다. 그리고 액션은 실행 시점과 횟수에 의존합니다.

  • 언제 실행 되는지 - 순서
  • 얼마나 실행 되는지 - 반복

❓ 액션은 어떻게 구현하나요?

자바스크립트에서는 함수로 구현합니다 계산도 함수로 구현 하기 때문에 구분 하기 쉽지 않습니다. 앞으로 계산과 액션을 구분 하는 방법을 알아 볼 것입니다.

❓ 어떻게 액션에 의미를 담을 수 있나요?

액션으로 외부 세상의 영향을 줄 수 있습니다. 따라서 어떤 일을 하려는지 아는 것이 중요합니다.

🔵 예시

  • 이메일 보내기
  • 계좌에서 인출하기
  • 전역 변수 값 바꾸기
  • 에이젝스 요청 보내기

🔵 액션을 잘 다루려면?

  1. 가능한 액션을 적게 사용합니다. 액션을 전혀 쓰지 않을 수는 없습니다. 액션 대신 계산을 사용할 수 있는지 생각해 봐야 합니다.
  2. 액션은 가능한 작게 만듭니다. 액션에서 액션과 관련 없는 코드는 모두 제거합니다. 예를 들어, 액션에서 결정이나 계획와 관련된 부분은 계산으로 빼낼 수 있습니다.
  3. 액션이 외부세계와 상호 작용 하는 것을 제한 할 수 있습니다. 액션은 외부세계 영향을 주거나 받을 수 있습니다. 내부에 계산과 데이터만 있고 가장 바깥쪽에 액션이 있는 구조가 이상적 입니다.
  4. 액션이 호출지점에 의존 하는 것을 제한 합니다. 함 수영 프로그램은 액션이 호출 네시쯤 거 패스에 덜 의존하도록 만드는 기술을 알고 있습니다. 그래서 액션을 사용할 때 조금 더 쉽게 사용할 수 있습니다.