CHAPTER 1 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다

CHAPTER 1 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다

함수형 프로그래밍은 무엇인가요?

함수형 프로그래밍(functional programming)

  • 수학 함수를 사용하고 부수 효과(side effect)를 피하는것이 특성인 프로그래밍 패러다임
  • 부수 효과 없이 순수 함수(pure function)만 사용하는 프로그래밍 패러다임

부수 효과(side effect)

  • 함수가 리턴값 이외에 하는 모든 일을 말한다

순수 함수(pure function)

  • 인자에만 의존하고 부수 효과가 없는 함수
  • 수학 함수라 볼수 있다

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

함수형 프로그래밍

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

문제 1. 부수 효과는 필요합니다

부수 효과는 소프트웨어를 실행하는 이유이다

문제 2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있습니다

순수 함수만 쓰라는 것처럼 되어 있지만 순수하지 않은 함수도 사용합니다

문제 3. 함수형 프로그래밍은 실용적이다

함수형 프로그래밍이 수학적이라 실제 소프트웨어 개발에서 사용하지 않는 것 처럼 느껴집니다

함수형 프로그래밍을 학문적 지식이 아닌 기술과 개념으로 보기

중요한 기술

  • 액션 action
  • 계산 calculation
  • 데이터 data

액션과 계산, 데이터 구분하기

함수형 프로그래머는 직감적으로 코드를 세 분류로 나눈다

  • 액션
  • 계산
  • 데이터

함수형 프로그래머는 부를 때 조심해야 하는 코드를 구분합니다

  • 액션: 호출하는 시점과 횟수에 의존한다
  • 액션이 아닌 코드 : 호출하는 시점과 횟수에 의존하지 않는다

함수형 프로그래머는 실행하는 코드와 그렇지 않은 코드를 구분합니다

계산 과 데이터는 둘다 부르는 시점이나 횟수가 중요하지 않다

  • 데이터 : 정적이고 보이는 그대로
  • 계산 : 동적이고 보이지 않는다

함수형 프로그래머는 코드를 액션과 계산 데이터로 구분

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

1단계: 사용자가 작업 완료 표시를 함

UI 이벤트인데 실행 횟수에 의존하기 때문에 액션입니다

2단계: 클라이언트가 서버로 메시지를 보냄

메시지를 보내는것도 액션이다
메시지 자체는 나중에 서버에서 해석해야 되는 값이기 때문에 데이터다

3단계: 서버가 메시지를 받음

메시지를 받는 횟수에 의존하므로 액션

4단계: 서버가 데이터 베이스를 변경

내부 상태를 바꾸는 것은 액션

5단계: 서버가 누구에서 알림을 보낼지 결정

결정하는 것은 계산이다. 입력값이 같다면 서버는 항상 같은 결정을 내리기 때문

6단계: 서버가 이메일로 알림을 보냄

이메일 보내기는 액션

함수형 프로그래밍에서는 코드를 세 가지로 분류합니다

  • 액션
    • 호출하는 시점과 횟수에 둘다 의존한다
  • 계산
    • 입력값을 출력값으로 만드는 것
  • 데이터
    • 이벤트에 대해 기록한 사실

      액션, 계산, 데이터를 구분하면 어떤 장점이 있나요?

      요즘 유행하는 분산 시스템에 잘 어울린다

시간에 따라 바뀌는 값을 모델링 할때 동작 방법을 이해하는 것은 중요하지만 쉽지 않다
실행시점이나 횟수에 의존하는 코드를 없애면 코드를 더 쉽게 이해할수 있고 심각한 버그를 막을수 있다

데이터와 계산은 실행 시점이나 횟수에 의존하지 않는다

액션은 실행시점이나 횟수에 의존하지만 코드 전체에 영향을 주지 않도록 격리시키면 된다

함수형 사고가 무엇인가요?

함수형 사고(functional thinking)

  • 액션, 계산, 데이터
  • 일급 추상

이 책을 읽는 기본 규칙

  • 특정 언어 기능에 의존하지 않아야 한다
  • 실용적이라 바로 쓸 수 있어야 한다
  • 여러분의 현재 가지고 있는 코드와 관계 없이 쓸 수 있어야 된다

참조