diff --git "a/\354\261\225\355\204\260_1/\353\205\270\354\230\210\354\260\254.md" "b/\354\261\225\355\204\260_1/\353\205\270\354\230\210\354\260\254.md" new file mode 100644 index 0000000..6945d00 --- /dev/null +++ "b/\354\261\225\355\204\260_1/\353\205\270\354\230\210\354\260\254.md" @@ -0,0 +1,55 @@ +# 1.쏙쏙 들어오는 함수형코딩에 오신 것을 환영합니다. + +## 함수형 프로그래밍은 무엇인가요? + +함수형 프로그래밍을 무엇이라고 정의내리는 것은 쉽지 않다. 또한 많은 자료가 학계에서 만든 것이기 때문에 일반 개발자가 이해하기 어렵고 실용적이지 않은 측면이 있다. 하지만 본 책은 실무에서 쓸 수 있는 내용을 다루고자 한다. + +그럼에도 함수형 프로그래밍을 한번 정의해보자. 위키피디아에서는 다음과 같이 함수형 프로그래밍을 정의한다. + +- 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임 +- 부수효과 없이 순수함수만 사용하는 프로그래밍 스타일 + - 부수효과 : 함수가 리턴하는 값 이외에 하는 모든 일을 말한다. + - 순수함수 : 인자에만 의존하고 부수 효과가 없는 함수이다. + +## 실용적인 측면에서 함수형 프로그래밍 정의의 문제점 + +위에서 우리는 함수형 프로그래밍의 정의를 살펴봤다. 하지만 위외같은 정의는 실용적인 측면에서 3가지 문제점이 존재한다. + +1. 부수효과는 필요하다 : 부수 효과는 소프트웨어를 실행하는 이유다. 부수 효과는 필요할 때는 반드시 사용해야만 한다. +2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다 : 함수형 프로그래머는 순수하지 않은 함수도 사용한다. 그리고 순수하지 않은 함수를 잘 다룰 수 있는 기술이 많이 있다. +3. 함수형 프로그래밍은 실용적이다 : 함수형으로 만들어진 좋은 소프트웨어가 많이 존재한다. + +## FP를 학문이 아닌 기술과 개념으로 보기 + +함수형 프로그래밍의 중요한 개념은 패러다임이나, 언어를 가리지 않고 모든 영역에서 적용할 수 있다. 그 함수형 프로그래밍의 중요한 핵심 개념은 다음의 3가지다 + +- 액션 +- 계산 +- 데이터 + +## 액션과 계산, 데이터 구분하기 + +### 함수형 프로그래머는 부를 때 조심해야 하는 코드(액션)를 구분한다 + +액션은 호출하는 시점과 횟수에 의존한다. 그래서 호출할 때 조심해야한다. + +### 함수형 프로그래머는 실행하는 코드와 그렇지 않은 코드를 구분한다 + +- 계산이나 데이터는 둘 다 부르는 시점이나 횟수가 중요하지 않ㄴ다. +- 계산과 데이터의 차이는 실행 여부에 있다. 계산은 실행 가능하지만 데이터는 그렇지 않다. 데이터는 정적이고 보이는 그대로이다. 계산은 실행하기 전까지 어떻게 동작할 지 알 수 없다. +- 함수형 프로그래머는 코드를 액션과 계산, 데이터로 구분한다. + +## 액션, 계산, 데이터를 구분하면 어떤 장점이 있나? + +- 시간에 따라 바뀐는 값을 모델링할 때 동작 방법을 이해하는 것은 중요하지만 쉽지 않다. 실행 시점이나 횟수에 의존하는 코드를 없애면, 코드를 더 쉽게 이해할 수 있다. 그리고 심각한 버그를 막을 수 있다. +- 데이터와 계산은 실행 시점이나 횟수에 의존하지 않는다. 그래서 코드를 데이터와 계산으로 바꿀수록 분산 시스템에서 생기는 여러가지 문제를 해결할 수 있다. +- 액션은 여전히 문제점을 가지고 있지만, 해당 영역이 코드 전체에 영향을 주지 않도록 격리시키면 된다. + +## 함수형 사고란 무엇인가? + +함수형 사고는 함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각을 말한다. 크게 중요한 2가지 개념이 존재한다. + +1. 액션과 계산, 데이터 +2. 일급 추상 + +이 2가지 개념이 함수형 프로그래밍의 근간이 되는 개념이다. 이것을 이해함으로써 우리는 전문적인 함수형 프로그래머로 거듭날 수 있다.