개요
함수형 프로그래밍을 학습하고 싶어서 JS로 된 교재를 구매하여 읽고 있습니다.
이 책은 굉장히 많은 내용을 다루고 있으며, 하나의 언어를 읽을 수 있다면 코드를 읽는데 문제가 없기에 강력 추천합니다!!
이 책의 목차입니다.
CHAPTER 1 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다 1
CHAPTER 2 현실에서의 함수형 사고 17
PART I 액션과 계산, 데이터
CHAPTER 4 액션에서 계산 빼내기 61
CHAPTER 5 더 좋은 액션 만들기 87
CHAPTER 6 변경 가능한 데이터 구조를 가진 언어에서 불변성 유지하기 109
CHAPTER 7 신뢰할 수 없는 코드를 쓰면서 불변성 지키기 147
CHAPTER 8 계층형 설계 I 167
CHAPTER 9 계층형 설계 II 201
PART II 일급 추상
CHAPTER 10 일급 함수 I 233
CHAPTER 11 일급 함수 II 267
CHAPTER 12 함수형 반복 289
CHAPTER 13 함수형 도구 체이닝 317
CHAPTER 14 중첩된 데이터에 함수형 도구 사용하기 355
CHAPTER 15 타임라인 격리하기 391
CHAPTER 16 타임라인 사이에 자원 공유하기 441
CHAPTER 17 타임라인 조율하기 471
CHAPTER 18 반응형 아키텍처와 어니언 아키텍처 509
CHAPTER 19 함수형 프로그래밍 여행에 앞서 541
정의
- 순수 함수를 사용하고 부수 효과(side-effect)를 피하는 것이 특징인 프로그래밍 패러다임.
- 부수 효과 없이 순수 함수(pure function)만 사용하는 프로그래밍 스타일
순수 함수: 인자에만 의존하고 부수 효과가 없는 함수이다.
인자에만 의존한다는 것은 같은 인자를 넣으면 항상 같은 결과를 리턴한다는 것이다.
부수 효과: 함수가 리턴값 이외에 하는 모든 일을 말한다.
부수 효과는 함수를 부를 때마다 발생하기 때문에 문제가 될 수 있다.
어떤 경우에는 리턴값이 필요해서 불렀지만 의도하지 않게 부수 효과를 발생할 수 있다.
대부분의 함수형 프로그래밍에서는 부수 효과를 가능한 사용하지 않으려고 한다.
ex) 메일보내기, 파일 읽기, 웹 요청하기
앞에서 살펴본 함수형 프로그래밍은 학문적 가치는 있을지 모르지만 실제 프로그래밍을 하는 개발자에게는 큰 도움이 되지 않는다.
문제점
문제1. 부수 효과는 필요하다
부수 효과는 소프트웨어를 실행하는 이유이다. 이메일을 전송하지 않는 이메일 전송 소프트웨어가 무슨 의미가 있겠는가?
정의에는 부수 효과를 완전히 쓰지 말라는 것처럼 되어 있지만 필요할 때는 써야한다
문제2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있어야 한다.
정의에는 순수 함수만 쓰라는 것처럼 되어 있지만, 함수형 프로그래머는 순수하지 않은 함수도 사용한다. 그리고 순수하지 않은 함수를 잘 다룰 수 있는 기술이 많이 있다.
문제3. 함수형 프로그래밍은 실용적이다.
정의에서는 함수형 프로그래밍이 수학적이라 실제 소프트웨어 개발에서는 사용하지 않는 것처럼 느껴지지만, 함수형 프로그래밍은 잘 만들어진 좋은 소프트웨어가 많이 있습니다.
그래서 위 정의는 함수형 프로그래밍을 시작하려는 사람들에게 혼란을 준다.
함수형 프로그래밍은 사람들이 서로 다른 의미로 생각합니다.
또 학술적으로도 실용적으로도 많은 내용이 있습니다.
실제 함수형 프로그래밍을 쓰고 있는 프로그래머가 가진 기술과 생각의 흐름, 시각을 정리하였습니다.
FP의 중요한 개념
액션(Action), 계산(Calculation), 데이터(Data)
액션, 계산, 데이터를 구분해보세요
// 1
{"firstname": "Eric",
"lastname" : "Normand"}
// 2
sendEmail(to,from,subject,body)
//3
sum(numbers)
//4
saveUserDB(user)
//5
string_length(str)
//6
getCurrentTime()
//7
[1,10,5,2,9]
액션은…. 2 , 4 , 6번 이죠.
계산은…. 3, 5번 이죠.
데이터는…. 1 , 7번 이죠.
방금의 분류는 매우 중요하다. 액션은 호출하는 시점과 횟수에 의존한다.
그래서 호출할 때 조심해야 한다.
반면 계산, 데이터 코드는 사용하기 쉽다. 예를 들어 sum 함수는 호출하는 시점이 중요하지 않다.
언제 호출해도 항상 같은 값을 주기 때문이다. 호출하는 횟수 역시 중요하지 않다.
나머지 코드나 소프트웨어 외부에 영향을 주지 않기 때문에 여러 번 호출해도 상관없다.
계산과 데이터의 차이는 실행 여부에 있는데, 계산은 실행 가능하나 데이터는 그렇지 않다.
데이터는 정적이고 보이는 그대로 이다.
하지만 계산은 실행하기 전에 어떻게 동작할지 알 수 없다.
액션, 데이터, 계산을 구분하는 것은 함수형 프로그래밍의 기본이다.
일반적으로 액션 보다는 계산이 쓰기 쉽고 계산 보다는 데이터가 쓰기 쉽다고 생각한다.
결과적으로 가장 쓰기 좋은 것은 데이터 이다.
결정(계산)과 결정된 내용을 전송(액션)하는 것은 다르다.
정리
프로그래밍 패러다임은 하나만 사용하는게 아니라, 여러개의 패러다임을 배우면 코드를 보는 시야가 달라지는 것 같다.
학습하는 언어의 프로그래밍의 스타일에 따라서 학습하는게 좋은 것 같습니다!!
'TMI' 카테고리의 다른 글
패스트캠퍼스 CampCON 후기 (0) | 2024.03.27 |
---|---|
[프로젝트] 엘리스 1차 프로젝트 후기 (0) | 2024.03.05 |
[Electron] 일렉트론 기초 학습!! (1) | 2024.01.27 |
패스트캠퍼스 강의 구매 후기 (0) | 2023.12.02 |
DevOps 란? (0) | 2023.11.18 |