본문 바로가기

Javascript

JS - 이터러블 프로토콜을 따른 map 의 다형성 (2) - JS ES6+ 함수형 프로그래밍 - 13

본 시리즈는 인프런 강의 함수형 프로그래밍과 JavaScript ES6+ ( 지식 공유자 : 유인동 님 ) 의 강의를 수강하면서 내용을 제 방식대로 포스팅하는 글입니다.

 

함수형 프로그래밍과 JavaScript ES6+ - 인프런 | 강의

ES6+와 함수형 프로그래밍을 배울 수 있는 강의입니다. 이 강좌에서는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜을 상세히 다루고 응용합니다. 이터러블을 기반으로한 함수형 프로그래밍,

www.inflearn.com

 

이터러블 프로토콜을 따랐을때의 조합성에 대해서 한가지 사례를 더 살펴보자

let m = new Map();
m.set("a", 10);
m.set("b", 20);

const mit = m[Symbol.iterator]();
console.log(mit.next()); // {value: ['a', 10], done: false}
console.log(mit.next()); // {value: ['b', 20], done: false}
console.log(mit.next()); // {value: undefined, done: true}

// Map 객체도 이터러블 프로토콜을 따르기 때문에, 우리가 구현한 map 함수에서 보조함수를 통해 원하는 값을 수집할수 있다.
console.log(map(([k, v]) => [k, v * 2], m)); // [['a', 20], ['b', 40]]

// map 함수는 이런식의 조합도 가능하다.
// 다시 Map 객체를 생성할수도 있다.
console.log(new Map(map(([k, v]) => [k, v * 2], m))); // Map (2) {'a' => 20, 'b' => 40 }

이터러블 프로토콜을 따르는 함수와 이터러블 프로토콜을 따르는 값의 조합은 다양하게 사용할수가 있게 되는 것이다.