[TIL] day08

kcm dev blog·2021년 8월 14일
0

TIL

목록 보기
6/19
post-thumbnail

배운 내용 요약

고차함수를 단순히 활용하는 것을 넘어 지연함수를 통해 주어진 모든 데이터를 확인하는 것이 아닌 일정 조건 수준에만 도달하면 탐색을 멈추는 지연 고차함수에 관해 학습했다. 라이브러리로 지원하는 개념이 아닌, 클로저라는 개념을 활용하여, 모든 인자를 받을 때까지 대기하다가, 모두 받으면 그때 비로소 평가가 이뤄지는 방식이다.

일반적인 경우 주어진 배열의 모든 값을 전부 생성하고, 호출하는 방식을 사용하면 불필요한 연산을 요구한다는 점에서 비효율적이다. 반면 지연함수를 사용하면 (평가를 중단시킬 수 있는 조건이 주어진다면) 연산을 중간에 멈추기 때문에 불필요한 메모리 할당과 연산에 필요한 시간을 줄일수 있다. 상황에 따라 결과가 달라지겠지만, 데이터의 양이 많아질수록 그 결과의 차이는 매우 크다

다만 지연 고차함수를 구현함에 있어 함수형 프로그래밍을 활용한다는 점에서 근본적인 문제를 가지고 있다. 실행 컨텍스트closer개념을 사용하다 보니 여러 단계의 실행 컨텍스트를 들어갔다 나왔다는 반복하다보니 명령형, 객체지향 프로그래밍 방식에 비해 연산 시간이 오래 걸린다는 근본적인 문제가 있다.

그럼에도 함수형 프로그래밍 방식을 사용하면 코드의 가독성이 높아진다는 점, iterable 객체를 자유롭게 활용 가능하다는 점에서 유용한 방식이다. 따라서, 함수형 프로그래밍 방식 하나만을 고집하기 보다는 객체지향 프로그래밍 방식에 함수형 프로그래밍 방식을 도입하는 방식으로 효율성을 높일 수 있다.즉, 클래스 안에 함수형 프로그래밍 방식을 도입하여 메소드를 작성하는 방식이다.

하루를 마무리하며

사실 함수형 프로그래밍 방식이 익숙하지도 않고, 실행 컨텍스트, closer 개념도 처음 접한 개념이라서 어려움이 많았다. 개념서적을 통해 그나마 이해하고 있음에도 여전히 익숙한 문법 스타일이 아니기 때문에 이해하는데 시간이 걸렸다.

그러나 자주쓰이는 방식은 아니더라도, 결국엔 js에서 고차함수를 사용할 일은 더 많아질 것이며 map, filter, reduce의 작동원리를 파악할 수 있는 유의미한 시간이었으며, 향후 지연평가가 필요한 상황이 생길 경우 대처할 수 있는 노하우가 생겼다는 점에서 한 층 성장했다는 느낌을 받은 한 주였다.

(그럼에도 .. 머리는 보람차다 하지만... 몸에서는 좀만 더하면 사망각이라고 하는 건 어쩔수 없다..)

profile
오늘 배운건 오늘 소화하자!

0개의 댓글