함수형 코딩 액션과 계산 데이터의 차이를 알기

쏙쏙 들어오는 함수형 코딩

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

이번 장에서 살펴볼 내용

  • 액션과 계산, 데이터가 어떻게 다른가
  • 문제에 대해 생각하거나 코드를 작성할 때 또는 코드를 읽을 때 액션과 계산, 데이터를 구분해서 적용
  • 액션이 코드 전체로 퍼질 수 있다
  • 이미 있는 코드에서 어떤 부분이 액션인지 찾을 수 있다.

액션과 계산, 데이터

다시 한 번 액션과 계산, 데이터가 무엇인지 떠올려보자.

액션은 실행 시점과 횟수에 의존한다. 다른 말로 부수 효과, 부수효과가 있는 함수라고 부른다. 또는 순수하지 않은 함수라고도 한다. 예를 들어 이메일 보내기, 데이터베이스 읽기 등이 있다.

계산은 입력으로 출력을 계산한다. 다른 말로 순수 함수, 수학 함수라고 부른다. 예를 들어 최댓값 찾기, 이메일 주소가 올바른지 확인하기 등이 있다.

데이터는 이벤트에 대한 사실이다. 예를 들어 사용자가 입력한 이메일 주소 등이 있다.

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

  2. 액션 안에는 계산과 데이터, 또 다른 액션이 숨어 있을지도 모른다.
    • 함수형 프로그래밍에서는 액션을 더 작은 액션과 계산, 데이터로 나누고 나누는 것을 언제 멈춰야 할지 아는 것이 중요하다.
  3. 계산은 더 작은 계산과 데이터로 나누고 연결할 수 있다.
  4. 데이터는 데이터만 조합할 수 있다.
    • 데이터는 다른 영향을 주지 않는 그냥 데이터이다. 그래서 데이터 찾는 일을 먼저 해야 한다. 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있다.
  5. 계산은 때로 ‘우리 머릿속에서’ 일어난다.

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

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

불변 데이터 구조를 만들기 위한 두가지 원칙은?

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

데이터의 장점은 무엇인가?

데이터는 데이터 자체로 할 수 있는 것이 없기 때문에 좋다. 데이터 그대로 이해할 수 있다.

  1. 직렬화 : 직렬화된 데이터는 전송하거나 디스크에 저장했다가 읽기 쉽다.
  2. 동일성 비교 : 데이터는 비교하기가 쉽다.
  3. 자유로운 해석 : 데이터는 여러 가지 방법으로 해석할 수 있다.

데이터의 단점은 무엇인가?

해석이 반드시 필요하다. 해석하지 않은 데이터는 쓸모없는 바이트일 뿐이다.

계산을 만드는 이유?

가능한 게산을 사용하려는 이유는 테스트하기 쉽기 때문이다. 계산은 외부에 영향을 주지 않기 때문에 쉽게 테스트 할 수 있다. 여러 번 테스트해도 문제가 되지 않는다. 계산을 나누면 구현하기 쉽다. 하지만 충분히 구현하기 쉽도록 생각되는 시점에서 더 나누는 것을 멈춰야 한다.

함수형 프로그래밍의 일반적인 구현 순서?

  1. 데이터
  2. 계산
  3. 액션

데이터를 파악하고 계산과 추가 데이터를 도출한다. 그리고 액션으로 모든 것을 묶는다. 데이터는 사용하는 데 제약이 많고 액션은 가장 제약이 없다. 데이터를 먼저 구현하고 계산을 구현한 후에 액션을 구현하는 것이 함수형 프로그래밍의 일반적인 구현 순서이다.

확장성에 대해 고려할 때 계산에서 중요한 것은?

계산은 고치지 않는다는 것이 중요하다. 추상적인 개념이 바뀌지 않는 한 계산은 바뀌지 않아야 한다.

계산은 어떻게 구현하는가?

계산은 함수로 구현한다.

어떻게 계산에 의미를 담을 수 있는가?

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

왜 액션보다 계산이 좋은가?

  1. 테스트하기 쉽다.
  2. 기계적인 분석이 쉽다. (정적분석)
  3. 계산은 조합하기 좋다. 계산을 조합하여 더 큰 계산을 만들 수 잇다.

계산을 쓰면서 걱정하지 않아도 되는 것은?

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

계산의 단점은?

실행하기 전에 어떤 일이 발생할지 알 수 없다. 예상은 할 수 있으나 입력값으로 실행해야 결과를 알 수 있다.

액션을 조심해야 하는 이유는?

액션은 코드 전체로 퍼진다. 액션을 부르는 함수가 있다면 그 함수도 액션이 된다. 액션을 쓰는 순간 코드 전체로 퍼져나가기 때문에 사용할 때 조심해야 한다.

액션은 다루기 힘들다. 액션은 우리가 소프트웨어를 실행하려는 가장 중요한 이유이다.

어떻게 액션에 의미를 담을 수 있는가?

액션으로 외부 세상에 영향을 줄 수 있다. 어떤 일을 하려는지 아는 것이 중요하다.

액션을 잘 활용하는 방법은?

  1. 가능한 액션을 적게 사용한다.
  2. 액션은 가능한 작게 만든다.
    • 액션에서 액션과 관련 없는 코드는 모두 제거한다.
  3. 액션이 외부 세계와 상호작용하는 것을 제한할 수 있다.
    • 액션은 외부 세계에 영향을 주거나 받을 수 있다. 내부에 계산과 데이터만 있고 가장 바깥쪽에 액션이 있는 구조가 이상적이다.
  4. 액션이 호출 시점에 의존하는 것을 제한한다.

결론: 액션과 계산, 데이터는 어떻게 적용하는가??

계산은 계획이나 결정을 할 때, 데이터는 계획하거나 결정한 결과, 액션을 통해 계산으로 만든 계획을 실행한다. 계산은 가능한 작게 쪼개서 구현하기 쉽게 만든다. 액션은 액션 안에 상관 없는 코드를 모두 제거하여 가능한 작게 만들고 적게 사용한다.

함수형 프로그래머는 액션보다 계산을 좋아하고 계산보다 데이터를 좋아한다.

results matching ""

    No results matching ""