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)
- 액션, 계산, 데이터
- 일급 추상
이 책을 읽는 기본 규칙
- 특정 언어 기능에 의존하지 않아야 한다
- 실용적이라 바로 쓸 수 있어야 한다
- 여러분의 현재 가지고 있는 코드와 관계 없이 쓸 수 있어야 된다