ES6+ Basic1

์ธํ”„๋Ÿฐ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ JavaScript ES6+ / ์œ ์ธ๋™

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ผ๊ธ‰ ํ•จ์ˆ˜

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ๊ฐ’์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ(์ธ์ž, ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’ ๋“ฑ)

  • ์กฐํ•ฉ์„ฑ๊ณผ ์ถ”์ƒํ™”์˜ ๋„๊ตฌ

๊ณ ์ฐจ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜(ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜)

  • ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜(ํด๋กœ์ €๋ฅผ ๋งŒ๋“ค์–ด ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜)

ES6์˜ ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ

๊ธฐ์กด์˜ for๋ฌธ๊ณผ ๋‹ฌ๋ผ์ง

for (const a of list){
    log(a);
}

๋‚ด์žฅ ์ดํ„ฐ๋Ÿฌ๋ธ”

  • Array

  • Set Map : ๊ธฐ์กด for๋ฌธ์œผ๋กœ ์ˆœํšŒ ๋ถˆ๊ฐ€

  • map.keys()ํ‚ค๋งŒ ๋ฝ‘์•„์คŒ map.values()๊ฐ’๋งŒ ๋ฝ‘์•„์คŒ map.entries()ํ‚ค์™€ ๊ฐ’

์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ

์ดํ„ฐ๋Ÿฌ๋ธ”์„ for..of, ์ „๊ฐœ ์—ฐ์‚ฐ์ž ๋“ฑ๊ณผ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋„๋กํ•œ ๊ทœ์•ฝ

  • ์ดํ„ฐ๋Ÿฌ๋ธ” : ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” [Symbol.iterator]() ๋ฅผ ๊ฐ€์ง„ ๊ฐ’

  • ์ดํ„ฐ๋ ˆ์ดํ„ฐ : { value, done } ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” next() ๋ฅผ ๊ฐ€์ง„ ๊ฐ’ (์ˆœํšŒ๋ฅผ ํ•˜๋‹ค๊ฐ€ done์ด true๊ฐ€ ๋˜๋ฉด ๋น ์ ธ๋‚˜์˜ด)

์‚ฌ์šฉ์ž ์ •์˜ ์ดํ„ฐ๋Ÿฌ๋ธ”

const iterable = {
    [Symbol.iterator]() {
        let i = 3;
        return {
            next() {
                return i == 0 ? { done: true } : { value: i--, done: false }
            },
            // ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋กœ ๋งŒ๋“  ํ›„์— ์‹คํ–‰ํ•ด๋„ ์ˆœํšŒ๊ฐ€ ๋˜์–ด์•ผ ํ•จ
            [Symbol.iterator]() { return this; }
        }
    }
};
let iterator = iterable[Symbol.iterator]();
for (const a of iterable) log(a);

//์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ์ž๊ธฐ ์ž์‹  ๋˜ํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ์ž๊ธฐ ์ž์‹ ์„์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ž˜ ๊ตฌํ˜„๋œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‚ด์žฅ ๋˜์ง€ ์•Š์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ดํ„ฐ๋Ÿฌ๋ธ”๋„ ์‹ฌ๋ณผ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉด(์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅธ๋‹ค๋ฉด) ์ˆœํšŒํ•  ์ˆ˜ ์žˆ์Œ

์ „๊ฐœ ์—ฐ์‚ฐ์ž

์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๊ฐ์ฒด๋“ค์„ ์ „๊ฐœํ•  ์ˆ˜ ์žˆ์Œ

  • ... ์ „๊ฐœ ์—ฐ์‚ฐ์ž

์ œ๋„ˆ๋ ˆ์ดํ„ฐ

์ดํ„ฐ๋ ˆ์ดํ„ฐ์ด์ž ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ƒ์„ฑ(๋ฆฌํ„ด)ํ•˜๋Š” ํ•จ์ˆ˜

// ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ *์„ ๋ถ™์—ฌ์„œ ๋งŒ๋“ฌ
function *gen() {
    yield 1;
    if (false) yield 2;
    yield 3;
    return 100;
    //๋ฆฌํ„ด๊ฐ’๋„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ(done์ด true๊ฐ€ ๋ ๋•Œ)
}

for (const a of gen()) log(a);

//odds ์˜ˆ์ œ
function *ifinity(i = 0) {
    while (true) yield i++;
}
function *limit(l, iter) {
    for (const a of iter) {
        yield a;
        if (a == l) return;
    }
}
function *odds(l) {
    for(const a of limit(l, ifinity(1))) {
        if (a % 2) yield a;
    }
}
  • ๋ฌธ์žฅ์„ ์ด์šฉํ•ด ์ˆœํšŒํ•  ๊ฐ’์„ ์ž‘์„ฑํ•˜๋Š” ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ์–ด๋– ํ•œ ๊ฐ’์ด๋“  ์ˆœํšŒํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

๊ตฌ์กฐ ๋ถ„ํ•ด, ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž

log(...odds(10));
log([...odds(10), ...odds(20)]);

const [head, ...tail] = odds(5);
log(head);
log(tail);

const [a, b, ...rest] = odds(10);
log(a);
log(b);
log(rest);

220107 ๊ทธ๋ƒฅ ๊ทธ๋ ‡๊ตฌ๋‚˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋˜ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์˜ ๋™์ž‘์— ๋Œ€ํ•ด ์–ด๋А์ •๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ๋ณด๊ณ  ์—ฐ์Šตํ•ด๋ด์•ผ๊ฒ ๋‹ค

Last updated