함수형 프로그래밍의 달라진 순회방법
순회 방법은 기존 절차지향적이 였던 For 문과 조금 다른 방법을 이용하게 됩니다.
기존의 For이 아니라, for ~ of~ 문을 사용하는 것인데요 , 코드가 정말 직관적이게 되었습니다. str안에 있는걸 a로 하나씩 받아오는 아래의 예시 코드를 보시죠!
//Array 기존 코드
const lst=[1,2,3]
for(let i=0;i<lst.length;i++){
console.log([lst[i]])
}
//String 기존 코드
const str="abc";
for(let i=0;i<str.length;i++){
console.log(str[i]);
}
//==== ES 6 ======
//For...of~
for(const a of lst){
log(a)
}
//For...of~
for(const a of str){
log(a)
}
단순히 For 문을 보기 좋게, 좀 더 "직관적"으로 바꾸었을 까요?
- 가독성을 높이고, 직관적이게 코드를 짤 수 있다고 아주 큰 "장점"입니다만, 여기는 그 이상의 의미가 있습니다.
- 분명한 차이가 있는데, 그 핵심에 있는 부분이 바로, 이터레이터/이터러블 입니다.
- 사실 제가 알고리즘에서 계속 써왔던 파이썬의 for _ in range()에서, 이 Range도 iterator 중에 하나로, for in 문도 일종의 함수형 프로그래밍 방법 중에 하나였습니다.. ㄷㄷ (python 3.7?8부터 바꼇다고 들었습니다. 언제 바꿧데..)
const arr=[1,2,3,4,5];
for (const a of arr) log(a);
const set = new Set([1,2,3,4]);
for (const a of set) log(a);
const map = new Map([["A",1],["B",2],["C",3]]);
for (const a map) log(a);
Iterable/Iterator
- Iterable : 이터레이터를 리턴하는 [Symbol.iterator]()를 가진 값.
- Iterator : {value,done} 객체를 리턴하는 , next() 메서드를 가진 값.
- Iterable/Iterator Protocol : 이터러블을 for..of, 전개 연산자 등과 함께 동작하기 위한 약속
Iterable
이게 무슨 소리인지 와닿지 않을겁니다. 저 또한, 그랬습니다. 천천히 하나씩 따라와보시죠!
[Symbol.iterator]에는 아마, 함수가 들어있을겁니다. 왜냐하면, [Symbol.iterator]() 에서, 소괄호()는,"함수호출"이라는 의미를 가지니까요! 즉, [Symbol.iterator]이라는 함수를 call 했을 때, iterator라는 객체를 리턴하면, "이터러블"이라고 합니다. 이걸 다르게 이야기하면, "이터레이터를 리턴하는 [Symbol.iterator]()를 가진 값"이라고 정의할 수 있는거죠!
JS에서는 대표적으로 Array,Set,Map 등이 Iterable 입니다.
Iterator
Iterator은 {value,done}이라는 객체를 리턴하고, 이 {value,done}을 next()라는 메소드로 진행하게 됩니다.
여기서, 한걸음 더 가보자면, Iterator은 , Iterable 이기도 합니다. (액자식 구성, 재귀함수 멈춰!)
무슨 말이냐면, 아래의 코드를 보면 이해가 됩니다! iter에서 또, [Symbol.iterator]을 보면, 또한 정의가 되어있고, 함수를 call해주면 또 iterator를 반환해줍니다. 이때, iterator는 자기자신을 반환해줍니다
- 위 내용은 유인동님의 인프런 강의 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다.
- 출처,아래첨부
https://www.inflearn.com/course/functional-es6/dashboard
함수형 프로그래밍과 JavaScript ES6+ - 인프런 | 강의
ES6+와 함수형 프로그래밍을 배울 수 있는 강의입니다. 이 강좌에서는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜을 상세히 다루고 응용합니다. 이터러블을 기반으로한 함수형 프로그래밍,
www.inflearn.com
'Web Front-end > 함수형 프로그래밍(FP)' 카테고리의 다른 글
[JS/함수형] Reduce (0) | 2022.05.25 |
---|---|
[JS/함수형] Map,Filter 구현 (0) | 2022.05.25 |
[JS/함수형] 제너레이터와 이터레이터 (0) | 2022.05.22 |
[JS/함수형] Iterable Custom/전개연산자 (0) | 2022.05.18 |
[JS/함수형] JavaScript , 함수형? OOP? 정체가 뭘까! (0) | 2022.05.17 |