함수형 프로그래밍(5)
-
코드를 값으로 다루기
함수형 프로그래밍은 코드를 값으로 다룰 수 있다고 했다. 이 말이 무슨 말일까? go( 0, (a) => a + 1, (a) => a + 10, (a) => a + 100, console.log ); go 함수를 실행하면 0 + 1 + 10 + 100 의 연산을 거쳐 111을 리턴하게끔 구현하고 싶다. 정의한 reduce 함수를 활용해서 파라미터로 전달한 함수 코드를 값처럼 다뤄보자. const reduce = (f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value; } for (const a of iter) { acc = f(acc, a); } return acc; }; const go = (...ar..
2024.03.19 -
map, filter, reduce
map 아래와 같이 상품 정보들이 주어진다. const products = [ { name: '반팔티', price: 15000 }, { name: '긴팔티', price: 20000 }, { name: '핸드폰케이스', price: 15000 }, { name: '후드티', price: 30000 }, { name: '바지', price: 25000 }, ]; name끼리 price끼리 각 속성을 분리해서 따로 모으고 싶다. for ... of 구문을 사용해서 다음과 같이 구현할 수 있다. const products = [ { name: '반팔티', price: 15000 }, { name: '긴팔티', price: 20000 }, { name: '핸드폰케이스', price: 15000 }, { nam..
2024.03.11 -
제너레이터
제너레이터는 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 수 있는 특수한 함수이다. 제너레이터 함수를 호출하면 일반 함수처럼 함수 코드 블록을 실행하는 것이 아니라 제너레이터 객체를 생성해 반환한다. 제너레이터 함수가 반환한 제너레이터 객체는 이터러블이면서 동시에 이터레이터이다. function* genFunc() { yield 1; yield 2; yield 3; } const generator = genFunc(); console.log(Symbol.iterator in generator); // 이터러블이면서 console.log('next' in generator); // 이터레이터이다. 제너레이터 객체는 이터레이터지만 next 메서드를 포함해서 return, throw 총 3가지의 ..
2024.03.10 -
이터러블/이터레이터 프로토콜
이터레이션 프로토콜 순회 가능한 데이터 컬렉션(자료구조)을 만들기 위해 ECMAScript 사양에 정의하여 미리 약속한 규칙이다. 이터레이션 프로토콜에는 이터러블 프로토콜과 이터레이터 프로토콜이 있다. 이터러블 이터러블 프로토콜을 준수한 객체를 이터러블이라고 한다. 이터러블 프로토콜은 Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환하는데, 이러한 규약을 이터러블 프로토콜이라고 한다. 그리고 이 규약을 지키는 객체가 이터러블이다. 포인트는 이터러블 객체의 Symbol.iterator 메서드를 호출할 때 반환되는 객체가 이터레이터이다. const arr = [1, 2, 3]; console.log(Symbol.iterator in arr); let iter1 = ..
2024.03.10 -
일급 함수와 고차 함수
일급 객체 일급 객체의 조건 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다. 변수나 객체, 배열에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. const add5 = a => a + 5; log(add5); log(add5(5)); const f1 = () => () => 1; log(f1()); const f2 = f1(); log(f2); log(f2()); 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미이다. 객체는 값이므로 함수는 값으로 다룰 수 있다. 이것은 조합성과 추상화의 도구로 사용된다. 고차 함수 일급 함수의 특징을 살려 함수를 값으로 다루는 함수를 고차함수라고 한다. 고차함수는 크게 두가지 유형으로 ..
2024.03.10