# Chapter01. 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다


# 1. 함수형 프로그래밍은 무엇인가요? (사전적 정의)

함수형 프로그래밍(functional programming, FP, 명사)

  • 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
  • 부수 효과 없이 순수 함수만 사용하는 프로그래밍 스타일

📍 추가 용어 정리

용어 정의
부수 효과(side effect) 함수에서 결괏값을 주는 것 외에 하는 모든 행동
순수 함수(pure function) 인자에만 의존하고 부수 효과가 없는 함수로 인자에만 의존한다는 말은 같은 인자를 넣으면 항상 같은 결과를 돌려준다는 말이다.
  • 정의에 따르면 함수형 프로그래머는 항상 부수 효과를 피하고 순수 함수만 사용해야 할 것 같지만, 실제 함수형 프로그래머는 부수 효과와 순수하지 않은 함수를 사용한다.

# 2. 실용적인 측면에서 함수형 프로그래밍 정의의 문제점

  • 부수 효과는 필요하다.
    • 정의에는 부수 효과를 완전히 쓰지 말라는 것처럼 되어 있지만 필요할 때는 써야 한다.
  • 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다.
    • 함수형 프로그래밍에서는 순수하지 않은 함수를 잘 다룰 수 있는 기술이 많이 있다.
  • 함수형 프로그래밍은 실용적이다.
    • 정의만 보면 수학적이라 실제로 사용되지 않을 것 처럼 느껴지지만 오히려 함수형 프로그래밍으로 잘 만들어진 좋은 소프트웨어가 많이 있다.

# 3. 함수형 프로그래밍의 기본 개념

용어 개념
액션
  • 실행 시점이나 횟수 또는 둘 다 의존함(시간에 의존하므로 사용하기 가장 어려움)
  • 시간이 지남에 따라 안전하게 상태를 바꿀 수 있는 Tool
  • 순서를 보장하는 Tool
계산
  • 입력값으로 출력값을 만드는 것으로 같은 입력값을 가지고 계산하면 항상 같은 결괏값이 나옴
  • 시간에 의존적이지 않아 다루기 쉬움
  • 정확성을 위한 정적 분석 Tool 존재
  • 테스트하기 쉽고 언제든지 몇 번을 불러도 안전함
데이터
  • 이벤트에 대해 기록한 사실로 정적이고 해석이 필요함
  • 알아보기 쉬운 속성으로 되어 있고 실행하지 않아도 데이터 자체로 의미가 있음
  • 데이터를 효율적으로 접근하고 보관하기 위한 기술이 존재
  • 액션은 호출하는 횟수나 호출하는 시점이 중요하고 계산, 데이터는 부르는 시점이나 횟수가 중요하지 않다.
  • 계산은 실행 가능하나 데이터는 그렇지 않다.
  • 데이터는 정적이고 보이는 그대로 이지만 계산은 실행하기 전까지 어떻게 동작할지 알 수 없다.
  • 일반적으로 액션 보다는 계산이 쓰기 쉽고 계산 보다는 데이터가 쓰기 쉽다고 생각한다. 결과적으로 가장 쓰기 좋은 것은 데이터이다.
  • 데이터와 계산은 실행 시점이나 횟수에 의존하지 않으므로 코드를 데이터와 계산으로 바꿀수록 분산 시스템에서 생기는 여러 가지 문제를 해결할 수 있다.
  • 액션은 실행 시점과 횟수에 의존하기 때문에 여전히 문제가 되지만, 코드 전체에 영향을 주지 않도록 격리시키면 된다.