⏰ 하루 일정
2021/08/11
✅ 강의: 함수형 프로그래밍과 ES6+
✅ TIL 정리
✅ CS스터디 발표 준비
✅ 과제 코드 리팩토링
📑 TIL - 요약!
지연성
range()와 느긋한 L.range()
take() : 원하는 길이만큼 잘라주는 함수
지연 평가 (Lazy Evaluation)
- 지연 평가 함수 구현
- 평가 순서가 상관없는 함수형 프로그래밍의 이점
range(), map(), filter(), take(), reduce() (즉시실행함수)의 중첩사용
L.range(), L.map(), L.filter(), take() (지연평가함수)의 평가 순서
- 즉시실행함수와 지연평가함수의의 평가 과정의 차이점
- 엄격한 계산과 느긋한 계산의 효율성 비교
map(), filter() 계열의 함수들이 가지는 결합 법칙
- 지연 평가의 장점 - ES6+의 기본 규약을 통해 구현
- 결과를 만드는 함수
reduce(), take()
queryStr() 함수 만들기: reduce()로 결과를 만드는 함수
find() 함수 만들기: take()로 결과를 만드는 함수
- 지연평가 map(), 지연평가 filter() 만들기
L.map()/L.filter() + take() => 지연평가 map()/filter()
- 리팩토링(함수형)
- 값을 펼쳐서 하나의 배열로 반환하는 함수 만들기
- 지연 평가
L.flatten() : 원하는 만큼 값을 펼쳐서 이터러블로 리턴할 수 있는 함수
- 즉시 평가
flatten() : 전체 값을 펼쳐서 리턴해주는 함수
- L.flatMap(), flatMap() 함수 만들기
- 2차원 배열 다루기
🐣 새롭게 알게된 것
- 즉시 실행하는
range()는 이미 배열인 list를 reduce()에 전달한다
- 실행 → 배열 생성(이미 내부 값들이 평가된 상태) → 이터레이터 생성 → 평가된 값을 순회
- 지연 평가하는
L.range()는 순회하기 전까지는 실행하더라도 내부 함수가 작동하지 않는다.
- 실행 → 이터레이터 생성 → 값을 꺼내 평가하며 순회
- 순회할 때 비로소 값이 평가됨 (배열을 만들지 않고 필요 시 값을 꺼내기만 하는 것)
- 굳이 값을 꺼내서 사용하기 전이라면 배열 자체는 의미가 없기 때문에 사용할 때 비로소 값만 꺼내어 평가하는 것이다. (조금 더 효율적!)
- 지연 평가 = 제때 계산법 = 느긋한 계산법
- 느긋하지만 영리한 계산법이다.
- 제너레이터로 생성한 이터레이터를 만나서 값을 꺼낼 필요가 생길 때까지 평가를 미루는 기법이다.
- 장점: 효율성 / 조합성 / ES6+이후 공식적인 방법으로 구현이 가능해짐
- 엄격한 계산(즉시 실행)과 느긋한 계산(지연 평가)의 효율성은 차이가 있을 수 밖에 없고, 이터레이터 값이 많아질수록 성능차이도 커진다.
- 지연 평가 함수로 실행할 경우 무한수열이 들어와도 성능상에 차이가 없게된다.(필요한 값만 전달하므로)
- map()과 filter() 계열의 함수들은 사용하는 보조함수가 순수함수라면 들어오는 데이터가 무엇이든지 다음과 같이 결합하면 결과가 같다.
- [[mapping, mapping], [filtering, filtering], [mapping, mapping]]
=[[mapping, filtering, mapping], [mapping, filtering, mapping]]
- 이전에는 지연 방식을 직접 구현해야해서 표준화된 값이 없고, 해당하는 라이브러리에서만 동작하는 등 보편성이 결여되어 있었다면, 현재는 자바스크립의 공식적인 값을 통해서 함수와 함수가 리턴되는 값을 통해 지연 평가가 가능하기 때문에 ES6에서 약속된 규약이 등장한 점은 중요한 포인트이다.
- 공식적으로 구현한 지연성은 서로 다른 라이브러리나 서로 다른 사람이 만든 함수라도 자바스크립트의 기본 값으로 만들어졌기 때문에 조합성이 높고 어떤 값이든지 안전하게 사용할 수 있다.
- 함수를 실행했을 때 최종적으로 연산을 시작할 시점을 생각하면서 프로그래밍 하는게 좋다.
🚀 추가학습 list
- 지연 평가 [참고]
- go, pipe, curry 함수에 대한 이해가 부족하다. [참고]
👀 하루 후기
Day8
today's level ⭐⭐⭐⭐⭐
이번 내용에서는 강사님의 코드를 따라치기에 바빴기 때문에 그 내용이나 중요한 키워드를 찾아내기가 어려웠다..ㅠㅠ
아무래도 8일차 강의만 듣고는 지연 평가라는 낯선 기법을 모두 이해할 수 없을 것 같다.
그래서 TIL에도 정리를 못하고 있다가 뒤의 함수형 프로그래밍 강의를 더 듣고와서 다시 정리해보니 흐름은 따라갈 수가 있었다.
+
이론으로 아는 것과 실제로 함수형 프로그래밍을 활용해 코드를 짜는 것은 다르다. 하지만 함수형 코드를 직접 만들기 위해서는 이론과 이 기법의 필요성에 대한 이해가 선행되어야 한다고 생각한다.
강의를 따라가는 것이 어려워서 힘든 시간이었지만,,
결론은 지금당장 함수형으로 구현하지 못하는 것에 좌절하지 말고 차근차근 함수형 사고를 키워나가는 데 집중하자!