์ฑ <๋ฌ๋์๋ฐ์คํฌ๋ฆฝํธ>๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋๋ค.
๋ชฉ์ฐจ
- <์ฌ๋ณผ>
1. Symbol
2. ์ฌ๋ณผ์ ์์ฑ
2-1) ๋ํ์ ์ธ ์์ฉ์ฌ๋ณผ - <์ดํฐ๋ ์ดํฐ์ ์ ๋๋ ์ดํฐ>
1. ์ดํฐ๋ ์ดํฐ(Iteratoe)
1-1) ์ดํฐ๋ ์ด์ ํ๋กํ ์ฝ
2. ์ ๋๋ ์ดํฐ(generator)
<์ฌ๋ณผ>
1. Symbol
- ES6์์ ์๋ก ์ ๋ณด์ธ ์์ ํ์ ์ด๋ค.
typeof Symbol(); // 'symbol'
- ๊ฐ์ฒด์ Uniqueํ ์์ฑ์ ๋ง๋ค์ด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ถฉ๋์ ๋ง๊ธฐ ์ํด Symbol์ด ํ์ํ๋ค.
- ์๋ ๊ฐ์ฒด์ ์์ฑ ์ด๋ฆ์ ๋ฌธ์์ด๋ก ํํํ๋ค. ๊ทธ๋ฌ๋ ์๋ก ์ถ๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Array ๊ฐ์ด ๋ฒ์ฉ์ ์ผ๋ก ์ฐ์ด๋ ํ์ ์ ํ์ฅํ๋ค๊ณ ํ์ ๋,
- ๋ด๊ฐ ํ์ฅํ ๊ฒ๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ํ์ฅํ๋ค๋ฉด? ์ฌ๋ณผ์ Uniqueํ๊ธฐ ๋๋ฌธ์, description์ด ๊ฐ์๋ ์ถฉ๋ํ์ง ์๋๋ค.
- ๋ด๊ฐ Array์ ์์ฑ์ ๊ฐฏ์๋ฅผ ์ธ๊ณ ์๋ ์ฝ๋๊ฐ ์์๋ค๋ฉด? ์ฌ๋ณผ์ ๊ฐ์ฒด์ ์์ฑ์ ์ํํ๋ for in, Object.keys(obj), Object.getOwnPropertyNames(obj)์ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
2. ์ฌ๋ณผ์ ์์ฑ
์ฌ๋ณผ์ ๋ค์๊ณผ ๊ฐ์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์ฑํ ์ ์๋ค.
- Symbol('some') : ๊ณ ์ ํ ์ฌ๋ณผ์ ๋ฆฌํดํ๋ค.
- Symbol.for('some') : ์ฌ๋ณผ ๋ ์ง์คํธ๋ฆฌ์์ lookupํ์ฌ description์ด ๊ฐ์ผ๋ฉด ๋งค๋ฒ ๊ฐ์ ์ฌ๋ณผ์ ๋ฆฌํดํ๋ค.
- ์์ฉ ์ฌ๋ณผ : Symbol.iterator์ ๊ฐ์ด ํ์ค์ ์ ์๋ ์ฌ๋ณผ์ ์ฌ์ฉํ๋ค. ์์ฉ ์ฌ๋ณผ์ ํน๋ณํ ์ฉ๋๋ฅผ ์ํด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ๊ฒ์ด๋ค.
2-1) ๋ํ์ ์ธ ์์ฉ ์ฌ๋ณผ
- Symbol.iterator : ์ดํฐ๋ฌ๋ธํ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ฌ๋ณผ
- Symbol.hasInstance : instanceof๋ฅผ ํ์ฅํ๊ธฐ ์ํ ์ฌ๋ณผ
- Symbol.match : str.match(obj) ๋ฉ์๋๋ obj๋ฅผ ์ ๊ทํํ์์ผ๋ก ๋ณํํด์ ๋ฌธ์์ด ๊ฒ์์ ์ํํ๋๋ฐ, ์ด ๊ธฐ๋ฅ์ ํ์ฅํ๊ธฐ ์ํ ์ฌ๋ณผ
โป์์ฉ ์ฌ๋ณผ์ Symbol.match ๋์ @@match๋ก ํ๊ธฐํ ์๋ ์๋ค.
<์ดํฐ๋ ์ดํฐ์ ์ ๋๋ ์ดํฐ>
1. ์ดํฐ๋ ์ดํฐ(Iterator)
- ๋ฐ๋ณต์ ์ํด ์ค๊ณ๋, ํน๋ณํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ด๋ค.
- ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ next()๋ฅผ ๊ฐ์ง๊ณ , ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. { value: value, done: boolean }
- ์ดํฐ๋ ์ดํฐ๋ก '์ง๊ธ ์ด๋ ์๋๊ฐ' ํ์ ์ด ๊ฐ๋ฅํ๋ค.
- ๋ฐฐ์ด์ ์์๋ฅผ ๋์ดํ ๋ชฉ์ ์ด๋ผ๋ฉด for๋ฃจํ๋ for of๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ค.
const it = book.values();
let current = it.next();
while(!current.done){
console.log(current.value)
current = it.next();
}
- ์ดํฐ๋ ์ดํฐ๋ ๋ชจ๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ง๋ค ๋๋ง๋ค ์ฒ์์์ ์์ํ๋ค.
- ๊ฐ๊ฐ ๋ค๋ฅธ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ดํฐ๋ ์ดํฐ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋์์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
const it1 = book values();
const it2 = book values();
1-1) ์ดํฐ๋ ์ดํฐ ํ๋กํ ์ฝ : ๋ชจ๋ ๊ฐ์ฒด๋ฅผ iterable ๊ฐ์ฒด(์ํ ๊ฐ๋ฅํ ๊ฐ์ฒด)๋ก ๋ฐ๊ฟ
[Symbol.iterator](){
return this.๊ฐ์ฒด.values();
}
2. ์ ๋๋ ์ดํฐ(generator)
- ์ดํฐ๋ ์ดํฐ๋ฅผ ์ด์ฉํด ์์ ์ ์คํ์ ์ ์ดํ๋ ํจ์
- ์ ๋๋ ์ดํฐ๊ฐ ๋์ ํ ๋ ๊ฐ์ง ๊ฐ๋
- ํจ์์ ์คํ์ ๊ฐ๋ณ์ ๋จ๊ณ๋ก ๋๋์ผ๋ก์จ ํจ์์ ์คํ์ ์ ์ดํ๋ค.
- ์คํ ์ค์ธ ํจ์์ ํต์ ํ๋ค
- ์ ๋๋ ์ดํฐ (vs ํจ์)
- ์ธ์ ๋ ํธ์ถ์์๊ฒ ์ ์ด๊ถ ๋๊ธธ ์ ์์.(yield๋ก ์ ๋๋ ์ดํฐ์ ํธ์ถ์ ์ฌ์ด์์ ์๋ฐฉํฅ ํต์ ๊ฐ๋ฅ)
- ํธ์ถํ ์ฆ์ ์คํ๋์ง ์์ง๋ง, ๋์ ์ดํฐ๋ ์ดํฐ ๋ฐํ, ์ดํฐ๋ ์ดํฐ์ next๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์คํ๋จ.
- ์ ๋๋ ์ดํฐ๋ฅผ ๋ง๋ค ๋๋ function*(ํ์ดํ ํ๊ธฐ๋ฒ ์ฌ์ฉํ ์ ์์.)
- ์ ๋๋ ์ดํฐ์์ return์ธ์ yield ํค์๋ ์ฌ์ฉ ๊ฐ๋ฅ
function* rainbow(){
yield 'red'; # ํธ์ถ์ it์ด nextํธ์ถํด์ผ ์ด ํ์ด ์คํ๋๊ณ
yield 'orange'; # ๋ค์ nextํธ์ถ ๋์ ์ด ํ์ด ์คํ๋จ.
}
const it = rainbow();
it.next(); // {value : 'red', done : false}
it.next(); // {value : 'orange', done : false}
it.next(); // {value : undefined, done : true}
'๐ฐ ์ธ์ด > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๊ท ํํ์ (0) | 2020.01.23 |
---|---|
๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ(1) - ๋๊ธฐvs๋น๋๊ธฐ, ์ฝ๋ฐฑ (0) | 2020.01.14 |
map๊ณผ set (0) | 2020.01.10 |
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) (0) | 2020.01.05 |
๊ฐ์ฒด ์งํฅ ์ธ์ด - ํ๋กํ ํ์ ๊ธฐ๋ฐ ์ธ์ด(JS) (0) | 2020.01.04 |