ν°μ€ν 리 λ·°
[JavaScript] μ΄ν°λ¬λΈ
κ°λ°κ°κ΅΄πΈ 2022. 8. 5. 18:15μ΄ν°λ μ΄μ νλ‘ν μ½(iteration protocol)
ES6μμ λμ λ μ΄ν°λ μ΄μ νλ‘ν μ½μ μν κ°λ₯ν λ°μ΄ν° 컬λ μ (μλ£κ΅¬μ‘°)μ λ§λ€κΈ° μν΄ ECMAScript μ¬μμ μ μνμ¬ λ―Έλ¦¬ μ½μν κ·μΉμ λλ€.
- ES6 μ΄μ μ μν κ°λ₯ν λ°μ΄ν° 컬λ μ (λ°°μ΄, λ¬Έμμ΄, μ μ¬ λ°°μ΄ κ°μ²΄, DOM 컬λ μ λ±)μ ν΅μΌλ κ·μ½ μμ΄ κ°μ λλ¦μ ꡬ쑰λ₯Ό κ°μ§κ³ for λ¬Έ, for ... in λ¬Έ, forEach λ©μλ λ± λ€μν λ°©λ²μΌλ‘ μνν μ μμμ
- ES6μμ μν κ°λ₯ν λ°μ΄ν° 컬λ μ μ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνλ μ΄ν°λ¬λΈλ‘ ν΅μΌνμ¬ for ... of λ¬Έ, μ€νλ λ λ¬Έλ², λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ λμμΌλ‘ μ¬μ©ν μ μλλ‘ μΌμν
μ΄ν°λ μ΄μ νλ‘ν μ½μμλ μ΄ν°λ¬λΈ νλ‘ν μ½κ³Ό μ΄ν°λ μ΄ν° νλ‘ν μ½μ΄ μμ΅λλ€.
μ΄ν°λ¬λΈ νλ‘ν μ½
- Well-Known SymbolμΈ Symbol.iteratorλ₯Ό νλ‘νΌν° ν€λ‘ μ¬μ©ν λ©μλλ₯Ό μ§μ ꡬννκ±°λ νλ‘ν νμ 체μΈμ ν΅ν΄ μμλ°μ Symbol.iterator λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ€λ κ·μ½
- μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν κ°μ²΄λ₯Ό μ΄ν°λ¬λΈμ΄λΌ ν¨
- μ΄ν°λ¬λΈμ for ... of λ¬ΈμΌλ‘ μνν μ μμΌλ©° μ€νλ λ λ¬Έλ²κ³Ό λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ λμμΌλ‘ μ¬μ© κ°λ₯
μ΄ν°λ μ΄ν° νλ‘ν μ½
- μ΄ν°λ μ΄ν°λ next λ©μλλ₯Ό μμ νλ©° next λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ¬λΈμ μννλ©° valueμ done νλ‘νΌν°λ₯Ό κ°λ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°ννλ€λ κ·μ½
- μ΄ν°λ¬λΈμ Symbol.iterator λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°ν
- μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν κ°μ²΄λ₯Ό μ΄ν°λ μ΄ν°λΌ ν¨
- μ΄ν°λ μ΄ν°λ μμλ₯Ό νμνκΈ° μν ν¬μΈν° μν μ ν¨
μ΄ν°λ¬λΈ
μ΄ν°λ¬λΈμ Symbol.iteratorλ₯Ό νλ‘νΌν° ν€λ‘ μ¬μ©ν λ©μλλ₯Ό μ§μ ꡬννκ±°λ νλ‘ν νμ 체μΈμ ν΅ν΄ μμλ°μ κ°μ²΄λ‘ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν κ°μ²΄λ₯Ό λ§ν©λλ€.
μ΄ν°λ¬λΈμΈμ§ νμΈνλ ν¨μλ λ€μκ³Ό κ°μ΄ ꡬνν μ μμ΅λλ€.
const isIterable = v => v !== null && typeof v[Symbol.iterator] === 'function';
// λ°°μ΄, λ¬Έμμ΄, Map, Set λ±μ μ΄ν°λ¬λΈμ΄λ€.
isIterable([]); // -> true
isIterable(''); // -> true
isIterable(new Map()); // -> true
isIterable(new Set()); // -> true
isIterable({}); // -> false
μ΄ν°λ¬λΈμ for ... of λ¬ΈμΌλ‘ μνν μ μμΌλ©°, μ€νλ λ λ¬Έλ²κ³Ό λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ λμμΌλ‘ μ¬μ©ν μ μμ΅λλ€.
const array = [1, 2, 3];
// λ°°μ΄μ Array.prototypeμ Symbol.iterator λ©μλλ₯Ό μμλ°λ μ΄ν°λ¬λΈμ΄λ€.
console.log(Symbol.iterator in array); // true
// μ΄ν°λ¬λΈμΈ λ°°μ΄μ for...of λ¬ΈμΌλ‘ μν κ°λ₯νλ€.
for (const item of array) {
console.log(item);
}
// μ΄ν°λ¬λΈμΈ λ°°μ΄μ μ€νλ λ λ¬Έλ²μ λμμΌλ‘ μ¬μ©ν μ μλ€.
console.log([...array]); // [1, 2, 3]
// μ΄ν°λ¬λΈμΈ λ°°μ΄μ λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ λμμΌλ‘ μ¬μ©ν μ μλ€.
const [a, ...rest] = array;
console.log(a, rest); // 1, [2, 3]
μ΄μ²λΌ λ°°μ΄μ Array.prototypeμ Symbol.iterator λ©μλλ₯Ό μμλ°λ μ΄ν°λ¬λΈμ λλ€.
*μΌλ° κ°μ²΄λ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν μ΄ν°λ¬λΈμ΄ μλλ―λ‘ for ... of λ¬ΈμΌλ‘ μνν μ μμΌλ©°, μ€νλ λ λ¬Έλ²κ³Ό λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ λμμΌλ‘ μ¬μ©ν μ μμ΅λλ€. (μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μνλλ‘ κ΅¬ννλ©΄ μ΄ν°λ¬λΈλ‘ λ§λ€ μ μμ)
μΌλ° κ°μ²΄λ μ΄ν°λ¬λΈμ΄ μλμ§λ§, TC39 νλ‘μΈμ€μ stage 4(Finished) λ¨κ³μ μ μλμ΄ μλ μ€νλ λ νλ‘νΌν° μ μμ μΌλ° κ°μ²΄μ μ€νΈλ λ λ¬Έλ²μ μ¬μ©μ νμ©ν©λλ€.
const obj = { a: 1, b: 2 };
// μ€νλ λ νλ‘νΌν° μ μ(Stage 4)μ κ°μ²΄ 리ν°λ΄ λ΄λΆμμ μ€νλ λ λ¬Έλ²μ μ¬μ©μ νμ©νλ€.
console.log({ ...obj }); // { a: 1, b: 2 }
μ΄ν°λ μ΄ν°
μ΄ν°λ μ΄ν°λ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν κ°μ²΄λ‘ μ΄ν°λ¬λΈμ Symbol.iterator λ©μλλ₯Ό νΈμΆνλ©΄ λ°νλ©λλ€.
// λ°°μ΄μ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν μ΄ν°λ¬λΈμ΄λ€.
const array = [1, 2, 3];
// Symbol.iterator λ©μλλ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ€.
const iterator = array[Symbol.iterator]();
// Symbol.iterator λ©μλκ° λ°νν μ΄ν°λ μ΄ν°λ next λ©μλλ₯Ό κ°λλ€.
console.log('next' in iterator); // true
μ΄ν°λ μ΄ν°λ next λ©μλλ₯Ό κ°μ§κ³ μμ΄ μ΄ν°λ¬λΈμ κ° μμλ₯Ό μννκΈ° μν ν¬μΈν°μ μν μ ν©λλ€. μ¦, next λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ¬λΈμ μμ°¨μ μΌλ‘ ν λ¨κ³μ© μννλ©° μν κ²½κ³Όλ₯Ό λνλ΄λ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°νν©λλ€.
μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄μ ꡬμ±μ λ€μκ³Ό κ°μ΅λλ€.
- value νλ‘νΌν° : νμ¬ μν μ€μΈ μ΄ν°λ¬λΈμ κ°
- done νλ‘νΌν° : μ΄ν°λ¬λΈμ μν μλ£ μ¬λΆ
// λ°°μ΄μ μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν μ΄ν°λ¬λΈμ΄λ€.
const array = [1, 2, 3];
// Symbol.iterator λ©μλλ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλ€. μ΄ν°λ μ΄ν°λ next λ©μλλ₯Ό κ°λλ€.
const iterator = array[Symbol.iterator]();
// next λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ¬λΈμ μννλ©° μν κ²°κ³Όλ₯Ό λνλ΄λ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό
// λ°ννλ€. μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ valueμ done νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ€.
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
λΉνΈμΈ μ΄ν°λ¬λΈ
μλ°μ€ν¬λ¦½νΈλ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μν κ°μ²΄μΈ λΉνΈμΈ μ΄ν°λ¬λΈμ μ 곡ν©λλ€.
λΉνΈμΈ μ΄ν°λ¬λΈ | Symbol.iterator λ©μλ |
Array | Array.prototype[Symbol.iterator] |
String | String.prototype[Symbol.iterator] |
Map | Map.prototype[Symbol.iterator] |
Set | Set.prototype[Symbol.iterator] |
TypedArray | TypedArray.prototype[Symbol.iterator] |
arguments | arguments.prototype[Symbol.iterator] |
DOM 컬λ μ | NodeList.prototype[Symbol.iterator] HTMLCollection.prototype[Symbol.iterator] |
for ... of λ¬Έ
for ... of λ¬Έμ μ΄ν°λ¬λΈμ μννλ©΄μ μ΄ν°λ¬λΈμ μμλ₯Ό λ³μμ ν λΉν©λλ€.
for (λ³μμ μΈλ¬Έ of μ΄ν°λ¬λΈ) { ... }
for ... of λ¬Έμ λ΄λΆμ μΌλ‘ μ΄ν°λ μ΄ν°μ next λ©μλλ₯Ό νΈμΆνμ¬ μ΄ν°λ¬λΈμ μννλ©° next λ©μλκ° λ°νν μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄μ value νλ‘νΌν° κ°μ for ... of λ¬Έμ λ³μμ ν λΉν©λλ€. μ΄λ, μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄μ done νλ‘νΌν° κ°μ΄ trueμ΄λ©΄ μ΄ν°λ¬λΈμ μνλ₯Ό μ€λ¨ν©λλ€.
for (const item of [1, 2, 3]) {
// item λ³μμ μμ°¨μ μΌλ‘ 1, 2, 3μ΄ ν λΉλλ€.
console.log(item); // 1 2 3
}
// for ... of λ¬Έμ λ΄λΆλμμ for λ¬ΈμΌλ‘ νν
// μ΄ν°λ¬λΈ
const iterable = [1, 2, 3];
// μ΄ν°λ¬λΈμ Symbol.iterator λ©μλλ₯Ό νΈμΆνμ¬ μ΄ν°λ μ΄ν°λ₯Ό μμ±νλ€.
const iterator = iterable[Symbol.iterator]();
for (;;) {
// μ΄ν°λ μ΄ν°μ next λ©μλλ₯Ό νΈμΆνμ¬ μ΄ν°λ¬λΈμ μννλ€. μ΄λ next λ©μλλ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°ννλ€.
const res = iterator.next();
// next λ©μλκ° λ°νν μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄μ done νλ‘νΌν° κ°μ΄ trueμ΄λ©΄ μ΄ν°λ¬λΈμ μνλ₯Ό μ€λ¨νλ€.
if (res.done) break;
// μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄μ value νλ‘νΌν° κ°μ item λ³μμ ν λΉνλ€.
const item = res.value;
console.log(item); // 1 2 3
}
*for ... in λ¬Έκ³Ό μ μ¬νμ§λ§, for ... in λ¬Έμ μ¬λ²μΈ νλ‘νΌν° ν€λ₯Ό μ΄κ±°νμ§ μμ
μ΄ν°λ¬λΈκ³Ό μ μ¬ λ°°μ΄ κ°μ²΄
μ μ¬ λ°°μ΄ κ°μ²΄λ λ§μΉ λ°°μ΄μ²λΌ μΈλ±μ€λ‘ νλ‘νΌν° κ°μ μ κ·Όν μ μκ³ length νλ‘νΌν°λ₯Ό κ°λ κ°μ²΄λ₯Ό λ§ν©λλ€.
- length νλ‘νΌν°λ₯Ό κ°κΈ° λλ¬Έμ for λ¬ΈμΌλ‘ μν κ°λ₯
- μΈλ±μ€λ₯Ό λνλ΄λ μ«μ νμμ λ¬Έμμ΄μ νλ‘νΌν° ν€λ‘ κ°μ§λ―λ‘ λ°°μ΄μ²λΌ μΈλ±μ€λ‘ νλ‘νΌν° κ°μ μ κ·Ό κ°λ₯
νμ§λ§, μ μ¬ λ°°μ΄ κ°μ²΄λ μ΄ν°λ¬λΈμ΄ μλ μΌλ° κ°μ²΄λΌ Symbol.iterator λ©μλκ° μμ΅λλ€. λ°λΌμ for ... of λ¬ΈμΌλ‘ μνν μ μμ΅λλ€.
*λ¨, μμΈμ μΌλ‘ ES6μμ μ΄ν°λ¬λΈμ΄ λμ λλ©° μ μ¬ λ°°μ΄ κ°μ²΄μΈ arguments, NodeList, HTMLCollection μ λ°°μ΄μ Symbol.iterator λ©μλλ₯Ό ꡬννμ¬ μ΄ν°λ¬λΈμ΄ λμμ
// μ μ¬ λ°°μ΄ κ°μ²΄
const arrayLike = {
0: 1,
1: 2,
2: 3,
length: 3
};
// μ μ¬ λ°°μ΄ κ°μ²΄λ length νλ‘νΌν°λ₯Ό κ°κΈ° λλ¬Έμ for λ¬ΈμΌλ‘ μνν μ μλ€.
for (let i = 0; i < arrayLike.length; i++) {
// μ μ¬ λ°°μ΄ κ°μ²΄λ λ§μΉ λ°°μ΄μ²λΌ μΈλ±μ€λ‘ νλ‘νΌν° κ°μ μ κ·Όν μ μλ€.
console.log(arrayLike[i]); // 1 2 3
// μ μ¬ λ°°μ΄ κ°μ²΄λ μ΄ν°λ¬λΈμ΄ μλκΈ° λλ¬Έμ for...of λ¬ΈμΌλ‘ μνν μ μλ€.
for (const item of arrayLike) {
console.log(item); // 1 2 3
}
// -> TypeError: arrayLike is not iterable
// μ μ¬ λ°°μ΄ κ°μ²΄
const arrayLike = {
0: 1,
1: 2,
2: 3,
length: 3
};
// Array.fromμ μ μ¬ λ°°μ΄ κ°μ²΄ λλ μ΄ν°λ¬λΈμ λ°°μ΄λ‘ λ³ννλ€
const arr = Array.from(arrayLike);
console.log(arr); // [1, 2, 3]
νμ§λ§ μ μμ μ²λΌ μ μ¬ λ°°μ΄ κ°μ²΄μ ES6μμ λμ λ Array.from λ©μλλ₯Ό μ¬μ©νμ¬ λ°°μ΄λ‘ κ°λ¨ν λ³νν μ μμ΅λλ€.
μ΄ν°λ μ΄μ νλ‘ν μ½μ νμμ±
μ΄ν°λ¬λΈμ for ... of λ¬Έ, μ€νλ λ λ¬Έλ², λ°°μ΄ λμ€νΈλμ²λ§ ν λΉκ³Ό κ°μ λ°μ΄ν° μλΉμμ μν΄ μ¬μ©λλ―λ‘ λ°μ΄ν° 곡κΈμμ μν μ νλ€κ³ ν μ μμ΅λλ€. μ΄λ, λ€μν λ°μ΄ν° 곡κΈμκ° μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνλλ‘ κ·μ νλ©΄ λ°μ΄ν° μλΉμλ μ΄ν°λ μ΄μ νλ‘ν λ³Όλ§ μ§μνλλ‘ κ΅¬ννλ©΄ λ©λλ€.
* λ§μ½, ES6 μ΄μ λ°©μμ²λΌ ν΅μΌλ κ·μ½ μμ΄ λ€μν λ°μ΄ν° 곡κΈμκ° κ°μμ μν λ°©μμ κ°μ§λ€λ©΄ μλΉμλ λ€μν λ°μ΄ν° 곡κΈμμ μν λ°©μμ λͺ¨λ μ§μν΄μΌ ν΄μ λΉν¨μ¨μ μ
μ΄μ²λΌ μ΄ν°λ μ΄μ νλ‘ν μ½μ λ€μν λ°μ΄ν° 곡κΈμκ° νλμ μν λ°©μμ κ°λλ‘ κ·μ νμ¬ λ°μ΄ν° μλΉμκ° ν¨μ¨μ μΌλ‘ λ€μν λ°μ΄ν° 곡κΈμλ₯Ό μ¬μ©ν μ μλλ‘ "λ°μ΄ν° μλΉμμ λ°μ΄ν° 곡κΈμλ₯Ό μ°κ²°νλ μΈν°νμ΄μ€μ μν "μ ν©λλ€.
μ¬μ©μ μ μ μ΄ν°λ¬λΈ
μ¬μ©μ μ μ μ΄ν°λ¬λΈ ꡬν
μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνμ§ μλ μΌλ° κ°μ²΄λ μ΄ν°λ μ΄μ νλ‘ν μ½μ μ€μνλλ‘ κ΅¬ννλ©΄ μ¬μ©μ μ μ μ΄ν°λ¬λΈμ΄ λ©λλ€.
// μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°μΈ κ°μ²΄λ₯Ό λ°ννλ ν¨μ
const fibonacciFunc = function (max) {
let [pre, cur] = [0, 1];
// Symbol.iterator λ©μλμ next λ©μλλ₯Ό μμ ν μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°μΈ κ°μ²΄λ₯Ό λ°ν
return {
[Symbol.iterator]() { return this; },
// next λ©μλλ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°ν
next() {
[pre, cur] = [cur, pre + cur];
return { value: cur, done: cur >= max };
}
};
};
// iterλ μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°λ€.
let iter = fibonacciFunc(10);
// iterλ μ΄ν°λ¬λΈμ΄λ―λ‘ for...of λ¬ΈμΌλ‘ μνν μ μλ€.
for (const num of iter) {
console.log(num); // 1 2 3 5 8
}
// iterλ μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°λ€
iter = fibonacciFunc(10);
// iterλ μ΄ν°λ μ΄ν°μ΄λ―λ‘ μ΄ν°λ μ΄μ
리μ νΈ κ°μ²΄λ₯Ό λ°ννλ next λ©μλλ₯Ό μμ νλ€.
console.log(iter.next()); // { value: 1, done: false }
console.log(iter.next()); // { value: 2, done: false }
console.log(iter.next()); // { value: 3, done: false }
console.log(iter.next()); // { value: 5, done: false }
console.log(iter.next()); // { value: 8, done: false }
console.log(iter.next()); // { value: 13, done: true }
- Symbol.iterator λ©μλλ₯Ό ꡬννκ³ ν΄λΉ λ©μλκ° next λ©μλλ₯Ό κ°λ μ΄ν°λ μ΄ν°λ₯Ό λ°ννλλ‘ ν¨
- μ΄ν°λ μ΄ν°μ next λ©μλλ done κ³Ό value νλ‘νΌν°λ₯Ό κ°μ§λ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°ν
- for ... of λ¬Έ, μ€νλ λ λ¬Έλ², λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ μ¬μ© κ°λ₯
- fibonacciFuncμ μ΄ν°λ¬λΈμ΄λ©΄μ μ΄ν°λ μ΄ν°μΈ κ°μ²΄λ₯Ό μμ±νλ ν¨μ
무ν μ΄ν°λ¬λΈκ³Ό μ§μ° νκ°
무ν μ΄ν°λ¬λΈμ μμ±νλ ν¨μλ₯Ό μ μνμ¬ λ¬΄ν μμ΄μ κ°λ¨νκ² κ΅¬νν μ μμ΅λλ€.
// 무ν μ΄ν°λ¬λΈμ μμ±νλ ν¨μ
const fibonacciFunc = function () {
let [pre, cur] = [0, 1];
return {
[Symbol.iterator]() { return this; },
next() {
[pre, cur] = [cur, pre + cur];
// 무νμ ꡬνν΄μΌ νλ―λ‘ done νλ‘νΌν°λ₯Ό μλ΅νλ€.
return { value: cur };
}
};
};
// fibonacciFunc ν¨μλ 무ν μ΄ν°λ¬λΈμ μμ±νλ€.
for (const num of fibonacciFunc()) {
if (num > 10000) break;
console.log(num); // 1 2 3 5 8...4181 6765
}
// λ°°μ΄ λμ€νΈλμ²λ§ ν λΉμ ν΅ν΄ 무ν μ΄ν°λ¬λΈμμ 3κ°μ μμλ§ μ·¨λνλ€.
const [f1, f2, f3] = fibonacciFunc();
console.log(f1, f2, f3); // 1 2 3
μ μμ μ μ΄ν°λ¬λΈμ μ§μ° νκ°λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μμ±ν©λλ€.
- λ°μ΄ν°κ° νμν μμ μ΄μ κΉμ§λ 미리 λ°μ΄ν°λ₯Ό μμ±νμ§ μλ€κ° λ°μ΄ν°κ° νμν μμ μ΄ λλ©΄ λ°μ΄ν°λ₯Ό μμ±
- νκ° κ²°κ³Όκ° νμν λκΉμ§ νκ°λ₯Ό λ¦μΆλ κΈ°λ²
μ΄μ²λΌ μ§μ° νκ°λ₯Ό μ¬μ©νλ©΄ λΆνμν λ°μ΄ν°λ₯Ό 미리 μμ±νμ§ μκ³ νμν λ°μ΄ν°λ₯Ό νμν μκ°μ μμ±νλ―λ‘ λΉ λ₯Έ μ€ν μλλ₯Ό κΈ°λν μ μκ³ λΆνμν λ©λͺ¨λ¦¬λ₯Ό μλΉνμ§ μμΌλ©΄ 무νλ ννν μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
[μΆμ²] λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
'JavaScript > λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] λμ€νΈλμ²λ§ ν λΉ (0) | 2022.08.06 |
---|---|
[JavaScript] μ€νλ λ λ¬Έλ² (0) | 2022.08.05 |
[JavaScript] 7λ²μ§Έ λ°μ΄ν° νμ Symbol (0) | 2022.08.05 |
[JavaScript] String (0) | 2022.08.03 |
[JavaScript] RegExp (0) | 2022.08.03 |
- Total
- Today
- Yesterday
- νλ‘ν μ½
- JavaScript
- git
- fp
- μλ°μ€ν¬λ¦½νΈ
- μ΄λΆνμ
- λ μ컬 νκ²½
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°
- TDD
- λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive
- μκ³ λ¦¬μ¦
- λ°±μ€ node.js
- λ°±μ€
- λ°±μ€ javascript
- κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
- map
- Baekjoon
- λμμΈ ν¨ν΄
- http
- μ μ λ³μ
- 2019 μΉ΄μΉ΄μ€ κ°λ°μ κ²¨μΈ μΈν΄
- λ€νΈμν¬
- μ½λ©ν μ€νΈ
- ν¬ν¬μΈν°
- ν¨μν νλ‘κ·Έλλ°
- μ΄μ체μ
- μΉ΄μΉ΄μ€ μΈν΄
- νλ‘κ·Έλλ¨Έμ€
- νλ‘νΌν°
- μλ°
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |