Skip to content

Commit

Permalink
챕터1 (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
noy3928 authored May 22, 2024
1 parent f90692f commit 0de1c86
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions 챕터_1/노예찬.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 1.쏙쏙 들어오는 함수형코딩에 오신 것을 환영합니다.

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

함수형 프로그래밍을 무엇이라고 정의내리는 것은 쉽지 않다. 또한 많은 자료가 학계에서 만든 것이기 때문에 일반 개발자가 이해하기 어렵고 실용적이지 않은 측면이 있다. 하지만 본 책은 실무에서 쓸 수 있는 내용을 다루고자 한다.

그럼에도 함수형 프로그래밍을 한번 정의해보자. 위키피디아에서는 다음과 같이 함수형 프로그래밍을 정의한다.

- 수학 함수를 사용하고 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임
- 부수효과 없이 순수함수만 사용하는 프로그래밍 스타일
- 부수효과 : 함수가 리턴하는 값 이외에 하는 모든 일을 말한다.
- 순수함수 : 인자에만 의존하고 부수 효과가 없는 함수이다.

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

위에서 우리는 함수형 프로그래밍의 정의를 살펴봤다. 하지만 위외같은 정의는 실용적인 측면에서 3가지 문제점이 존재한다.

1. 부수효과는 필요하다 : 부수 효과는 소프트웨어를 실행하는 이유다. 부수 효과는 필요할 때는 반드시 사용해야만 한다.
2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다 : 함수형 프로그래머는 순수하지 않은 함수도 사용한다. 그리고 순수하지 않은 함수를 잘 다룰 수 있는 기술이 많이 있다.
3. 함수형 프로그래밍은 실용적이다 : 함수형으로 만들어진 좋은 소프트웨어가 많이 존재한다.

## FP를 학문이 아닌 기술과 개념으로 보기

함수형 프로그래밍의 중요한 개념은 패러다임이나, 언어를 가리지 않고 모든 영역에서 적용할 수 있다. 그 함수형 프로그래밍의 중요한 핵심 개념은 다음의 3가지다

- 액션
- 계산
- 데이터

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

### 함수형 프로그래머는 부를 때 조심해야 하는 코드(액션)를 구분한다

액션은 호출하는 시점과 횟수에 의존한다. 그래서 호출할 때 조심해야한다.

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

- 계산이나 데이터는 둘 다 부르는 시점이나 횟수가 중요하지 않ㄴ다.
- 계산과 데이터의 차이는 실행 여부에 있다. 계산은 실행 가능하지만 데이터는 그렇지 않다. 데이터는 정적이고 보이는 그대로이다. 계산은 실행하기 전까지 어떻게 동작할 지 알 수 없다.
- 함수형 프로그래머는 코드를 액션과 계산, 데이터로 구분한다.

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

- 시간에 따라 바뀐는 값을 모델링할 때 동작 방법을 이해하는 것은 중요하지만 쉽지 않다. 실행 시점이나 횟수에 의존하는 코드를 없애면, 코드를 더 쉽게 이해할 수 있다. 그리고 심각한 버그를 막을 수 있다.
- 데이터와 계산은 실행 시점이나 횟수에 의존하지 않는다. 그래서 코드를 데이터와 계산으로 바꿀수록 분산 시스템에서 생기는 여러가지 문제를 해결할 수 있다.
- 액션은 여전히 문제점을 가지고 있지만, 해당 영역이 코드 전체에 영향을 주지 않도록 격리시키면 된다.

## 함수형 사고란 무엇인가?

함수형 사고는 함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각을 말한다. 크게 중요한 2가지 개념이 존재한다.

1. 액션과 계산, 데이터
2. 일급 추상

이 2가지 개념이 함수형 프로그래밍의 근간이 되는 개념이다. 이것을 이해함으로써 우리는 전문적인 함수형 프로그래머로 거듭날 수 있다.

0 comments on commit 0de1c86

Please sign in to comment.