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