Skip to content

Latest commit

ย 

History

History
244 lines (210 loc) ยท 6.7 KB

ch34-ํ•ด์„ค.md

File metadata and controls

244 lines (210 loc) ยท 6.7 KB

Chapter34

๐Ÿ“Œ๋ฌธ์ œ1

true or false, ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฌผ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

ES6์—์„œ๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜์„ ์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”๋กœ ํ†ต์ผํ•˜์—ฌ for...in๋ฌธ,์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•,
๊ฐ์ฒด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์˜ ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์›ํ™” ํ–ˆ๋‹ค.
- true or false  // (1)
const obj = { 0: 1, 1: 2, length: 2 };
const iter = obj[Symbol.iterator]();
console.log(iter.next());  // (2)
console.log(iter.next());  // (3)
console.log(iter.next());  // (4)

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) false
for...in -> for...of
๊ฐ์ฒด -> ๋ฐฐ์—ด

(2~4) : TypeError: obj[Symbol.iterator] is not a function
์ผ๋ฐ˜ ๊ฐ์ฒด์—๋Š” Symbol.iterator๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ƒ์† ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ2

์ดํ„ฐ๋Ÿฌ๋ธ”,์ดํ„ฐ๋ ˆ์ดํ„ฐ,์ดํ„ฐ๋Ÿฌ๋ธ” ์ด๋ฉด์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ํŒ๋‹จํ•ด์ฃผ์„ธ์š”.

const f1 = (first, max) => {
  let num = first;
  return {
    [Symbol.iterator]() {
      return {
        next() {
          num += 1;
          return { value: num, done: num > max };
        },
      };
    },
  };
};

const test = f1(0, 10);  // (1)

const test1 = test[Symbol.iterator]();  // (2)

const f2 = (first, max) => {
  let num = first;

  return {
    [Symbol.iterator]() {
      return this;
    },
    next() {
      num += 1;
      return { vaule: num, done: num > max };
    },
  };
};

const test3 = f2(0, 10);  // (3)

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1): ์ดํ„ฐ๋Ÿฌ๋ธ”
 -> Symbol.iteraor๋ฅผ ํ‚ค๋กœ๊ฐ–๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋ฅผ ํ˜ธ์ถœํ–ˆ์„๋–„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๊ฐ–๊ธฐ๋•Œ๋ฌธ์— ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์ด๋ž€, next๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ(ํ˜ธ์ถœํ–ˆ์„๋–„ {value : _ , done : _ }๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด)๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ.

 (2): ์ดํ„ฐ๋ ˆ์ดํ„ฐ
 -> next๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ(ํ˜ธ์ถœํ–ˆ์„๋–„ {value : _ , done : _ }๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด)๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—.

 (3): ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ฉด์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ
 -> ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Symbol.iterator๋ฅผํ‚ค๋กœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ (์ดํ„ฐ๋Ÿฌ๋ธ”) ๋™์‹œ์— {value: _, done: _ }๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” next๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ.(์ดํ„ฐ๋ ˆ์ดํ„ฐ)

๐Ÿ“Œ๋ฌธ์ œ3

์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์ •๋‹ต ๋ฐ ํ•ด์„ค

๊ต์žฌ 621p
์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๊ฐ€ ํ•˜๋‚˜์˜ ์ˆœํšŒ ๋ฐฉ์‹์„ ๊ฐ–๋„๋ก ๊ทœ์ •ํ•˜์—ฌ
๋ฐ์ดํ„ฐ ์†Œ๋น„์ž๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก
๋ฐ์ดํ„ฐ ์†Œ๋น„์ž์™€ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—ฐ๊ฒฐ์„ ํ•œ๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ4

๋‹ค์Œ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์“ฐ์‹œ์˜ค

const arrayLike = { 
	0 : 1,
	1 : 2,
  	2 : 3,
	length : 3
};
console.log(Symbol.iterator in arrayLike); //(1)
for(const item of obj){ // (2)
	console.log(item);
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) false 
์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค. 
(2) TypeError
์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” for๋ฌธ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— for ... of์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•๊ณผ ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น์˜ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค. 
  • p616

๐Ÿ“Œ๋ฌธ์ œ5

5-1. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ฌดํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ” ์ƒ์„ฑ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ์‹œ์˜ค.

const addOne = function () {
	let cur = 0;
	const max = 10;
	return {
		[Symbol.iterator]() {return this; },
		next() {
			cur = cur + 1;
			return {value : cur, done: cur >= max};
		}
	};
};

for (const num of addOne()){
	if(num > 100) break;
	console.log(num);
}

์ •๋‹ต ๋ฐ ํ•ด์„ค

const addOne = function () {
	let cur = 0;
	return {
		[Symbol.iterator]() {return this; },
		next() {
			cur = cur + 1;
			return {value : cur}; //done ๊ฐ’์„ ์—†์• ์ค€๋‹ค
		}
	};
};

for (const num of addOne()){
	if(num > 100) break;
	console.log(num);
}

// ๋ฌดํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด๋Š” ๋๋‚˜๋Š” ์กฐ๊ฑด ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— done ๊ฐ’์„ ์—†์• ์ฃผ๋ฉด ๋œ๋‹ค. 
  • p625

5-2. ๋ฌดํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๊ฐ€? ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ์ง€ ์“ฐ์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

๋นŒํŠธ์ธ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 
๋ฐ์ดํ„ฐ ์†Œ๋น„์ž์ธ for ... of ๋ฌธ์ด๋‚˜ ๋ฐฐ์—ด ๋””์ŠคํŠธ๋Ÿญ์„œ๋ง ํ• ๋‹น ๋“ฑ์ด ์‹คํ–‰๋˜๊ธฐ ์ด์ „๊นŒ์ง€ 
๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. for ... of์˜ ๊ฒฝ์šฐ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ˆœํšŒํ•  ๋•Œ 
๋‚ด๋ถ€์—์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์ด๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
์ด์ฒ˜๋Ÿผ ์ง€์—ฐํ‰๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋ผ์„œ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋น„ํ•˜์ง€ ์•Š์œผ๋ฉฐ
๋™์‹œ์— ๋ฌดํ•œ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • p626

๐Ÿ“Œ๋ฌธ์ œ6

์ดํ„ฐ๋Ÿฌ๋ธ”๊ณผ ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ํŠน์„ฑ๊ณผ ์ฐจ์ด์ ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ •๋‹ต ๋ฐ ํ•ด์„ค

์ดํ„ฐ๋Ÿฌ๋ธ”
: Symbol.iterator๋ฅผ ํ”„๋กœํผํ‹ฐ ํ‚ค๋กœ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํ†ตํ•ด ์ƒ์†๋ฐ›์€ ๊ฐ์ฒด์ด๋‹ค. ๋”ฐ๋ผ์„œ for...of๋ฌธ์œผ๋กœ ์ˆœํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ฐ์ฒด์˜ ์†์„ฑ ๋˜๋Š” ํ”„๋กœํ† ํƒ€์ž… ์†์„ฑ์— `Symbol(Symbol.iterator)` ์†์„ฑ์ด ์žˆ๋‹ค.
์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด
: ์ธ๋ฑ์Šค๋กœ ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ , length ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด์ด๋‹ค. ํ•˜์ง€๋งŒ Symbol.iterator ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— for...of๋ฌธ์œผ๋กœ ์ˆœํšŒ ํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ7

๋‹ค์Œ ๋ณด๊ธฐ์— ์ดํ„ฐ๋Ÿฌ๋ธ”์ธ์ง€ ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด์ธ์ง€ ๋‘˜๋‹ค์ธ์ง€ ํŒ๋‹จํ•˜์‹œ์˜ค.

(1) []
(2) new String("123")
(3) new Number(123)
(4) document.querySelector('li')
(5) document.querySelectorAll('li')
(6) {}
(7) { length: 0 }
(8) null
(9) let range = {
      from: 1,
      to: 5,

      [Symbol.iterator]() {
        this.current = this.from;
        return this;
      },

      next() {
        if (this.current <= this.to) {
          return { done: false, value: this.current++ };
        } else {
          return { done: true };
        }
      }
    };

์ •๋‹ต ๋ฐ ํ•ด์„ค

(1) []
: ์ดํ„ฐ๋Ÿฌ๋ธ”O / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดO

(2) new String("123")
: ์ดํ„ฐ๋Ÿฌ๋ธ”O / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดO

(3) new Number(123)
: ์ดํ„ฐ๋Ÿฌ๋ธ”X / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดX

(4) document.querySelector('li')
: ์ดํ„ฐ๋Ÿฌ๋ธ”X / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดX

(5) document.querySelectorAll('li')
: ์ดํ„ฐ๋Ÿฌ๋ธ”O / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดO

(6) {}
: ์ดํ„ฐ๋Ÿฌ๋ธ”X / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดX

(7) { length: 0 }
: ์ดํ„ฐ๋Ÿฌ๋ธ”X / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดO

(8) null
: ์ดํ„ฐ๋Ÿฌ๋ธ”X / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดX

(9) range
: ์ดํ„ฐ๋Ÿฌ๋ธ”O / ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒดX