[FE - ConnecTo] DAY26 TIL๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

JUNYยท2022๋…„ 8์›” 16์ผ
0

๐Ÿ“šZeroBase ConnecTo Front-End

๋ชฉ๋ก ๋ณด๊ธฐ
15/53
post-thumbnail

22.08.16 ์ˆ˜์—…์„ ํ†ตํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š
ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค! ๐ŸŠ

์Šค์ฝ”ํ”„๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ œ

// ์•„๋ž˜ ์ฝ”๋“œ์—์„œ var๋กœ ์„ ์–ธ๋œ ๋ชจ๋“  i๋Š” ๊ฐ™์€ ์Šค์ฝ”ํ”„๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
// for๋ฌธ์ด ์ข…๋ฃŒ๋œ ํ›„์— setTimeout์ด ์‹คํ–‰๋˜๋ฏ€๋กœ i๋Š” ์ด๋ฏธ 5์ž…๋‹ˆ๋‹ค.
var i = 10;
for (var i = 0; i < 5; i++) {
  console.log(i, '๋ฒˆ์งธ for ๋ฌธ์ด ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค');
  setTimeout(function count() { 
    console.log(i)
    }, 100);
}
console.log(var)

// ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
// ์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•ด๋„ ๊ฒฐ๊ตญ i๊ฐ€ 5๋กœ ๋ณ€ํ•œ ๋’ค setTimeout์ด ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค.
for (var i = 0; i < 5; i++) {
	console.log(i, '๋ฒˆ์งธ for ๋ฌธ์ด ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค');
  (function() { setTimeout(function count() { 
    console.log(i)
    }, 100);})();
}

// ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
// ๋ณ€ํ™”ํ•˜๋Š” i๋ฅผ ์Šค๋ƒ…์ƒท์„ ์ฐ๋“ฏ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ์Šค์ฝ”ํ”„๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
for (var i = 0; i < 5; i++) {
  console.log(i, '๋ฒˆ์งธ for ๋ฌธ์ด ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค');
  (function() { 
    var j = i;
    setTimeout(function count() { 
      console.log(j)
      }, 100);})();
}

// i๋ฅผ ์ธ์ˆ˜๋กœ, j๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ์œ„์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
for (var i = 0; i < 5; i++) {
  (function(j) { 
    setTimeout(function count() { 
      console.log(j)
      }, 100);})(i);
}

// ์‚ฌ์‹ค var๋ฅผ let์œผ๋กœ ๋Œ€์ฒดํ•˜๋ฉด ์ด ์Šค์ฝ”ํ”„ ๋ฌธ์ œ๊ฐ€ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
// let i = 0์ธ ์Šค์ฝ”ํ”„, let i = 1์ธ ์Šค์ฝ”ํ”„ ... ๊ฐ€ ๊ฐ๊ฐ ์ƒ์„ฑ๋˜์–ด ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
for (let i = 0; i < 5; i++) {
  setTimeout(function count() { 
    console.log(i)
    }, 100);
}

์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ตํ•ด์•ผํ•˜๋Š” ์ด์œ ?

์‹๋ณ„์ž ๊ฒฐ์ •์„ ์œ„ํ•ด

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‹๋ณ„์ž์˜ ์กด์žฌ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ธ๋ฐ, ์‹๋ณ„์ž๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์•Œ์•„์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์„ ์–ธ์— ์˜ํ•ด์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž„.


๊ฐ์ฒด๋ž€?

์†์„ฑ๋“ค์˜ ๋‚˜์—ด์„ ์˜๋ฏธํ•จ. ์ด ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ถ”์ƒํ™”์ž„.

Object๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, Subject๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•จ. ์—ฌ๊ธฐ์„œ ์ฃผ์ฒด๋Š” ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์Œ.

  • property : ์†์„ฑ โ†’ ์ž์‚ฐ, ์žฌ์‚ฐ ๋“ฑ์— ๊ฐ€๊นŒ์šด ์˜๋ฏธ
  • attribute : ์†์„ฑ โ†’ ์ด ๋‹จ์–ด๊ฐ€ ์†์„ฑ์ด๋ผ๋Š” ์˜๋ฏธ์— ๋” ๊ฐ€๊น๋‹ค

ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

ํ”„๋กœํผํ‹ฐ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ. ์ฆ‰, ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๊ฐ์ฒด๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•  ์ˆ˜ ์žˆ์Œ.

  • value : ํ”„๋กœํผํ‹ฐ ๊ฐ’
  • writable : ์žฌํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? false์ด๋ฉด, ์žฌํ• ๋‹น ๋ถˆ๊ฐ€. Read only!
  • configurable : ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋“ค์„ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • enumerable : ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•œ๊ฐ€?

arguments

์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ด๋ฉฐ,

  1. length ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•จ
  2. ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ 0, 1, 2, 3, 4 ์ฒ˜๋Ÿผ ์ˆซ์ž์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ์ƒ๊ธด โ€˜๋ฌธ์ž์—ด'์ž„

๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์™€ callee, length, symbol ๋“ฑ๋“ฑ์€ enumerable์ด false์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ‰๊น”์ด ๋‹ค๋ฅด๊ณ , ์ƒ์†๋ฐ›์€ ์†์„ฑ๋“ค์€ [[Prototype]]์— ๋‹ด๊ฒจ ์žˆ์Œ.


์ˆœํšŒ vs ์—ด๊ฑฐ

  • ์ˆœํšŒ : ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•จ ๋ฐฐ์—ด [1, 2, 3]์„ for๋ฌธ์œผ๋กœ ๋„๋Š” ๊ฒฝ์šฐ
  • ์—ด๊ฑฐ : ์ˆœ์„œ๊ฐ€ ์˜๋ฏธ ์—†์Œ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ์ˆœ์„œ๊ฐ€ ์˜๋ฏธ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ด๊ฑฐ๋ผ๊ณ  ํ‘œํ˜„ ํ•จ. ๊ฐ์ฒด๋Š” ์ด๋ฆ„์— ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ๋ฐฐ์—ด์—๋Š” ์ด๋ฆ„์ด ์—†์Œ. ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค์ด๋ฉฐ, ๊ฐ์ฒด๋Š” ์ด๋ฆ„์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๊ฐ€์ง. ์—ด๊ฑฐ๊ฐ€ ๋˜๋Š” ์†์„ฑ๋“ค์€ enumerabledl true์ธ ๊ฒƒ๋“ค์ธ๋ฐ, false์ธ callee, length ๊ฐ™์€ ๊ฒƒ๋“ค์€ ๋‚˜์˜ค์ง€ ์•Š์Œ.

์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด

์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ.

๊ฐ์ฒด๊ฐ€ ๋ฐฐ์—ด๋ณด๋‹ค ๋‚˜์€ ์  ํ•˜๋‚˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ, ๋ฉ”์„œ๋“œ๋ฅผ ์ž์œ  ์ž์žฌ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž„.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ธ arguments ๊ฐ์ฒด๊ฐ€ ์—†์Œ.

๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜๋ฅผ Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์จ์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„.

//์•ˆ์“ฐ๋Š” ์˜›๋‚ ๋ฐฉ๋ฒ•. ๋ณ€์ˆ˜๋„ ๋งŽ์ด์จ์•ผ๋˜๊ณ  ๊ฐ€๋…์„ฑ ๋–จ์–ด์ง

const sum = function () {
	let res = 0;
	for (let i = 0; i < arguments.length; i++) {
		res += arguments[i];
	}
	return res;
}

// ES6 ์ดํ›„ ๋ฐฉ๋ฒ•. ๋ณ€์ˆ˜๋„ ์•ˆ ์“ฐ๊ผฌ ๊ฐ€๋…์„ฑ๋„ ์ข‹์Œ!
const sum = function (...args) {
	return args.reduce((p, c) => p + c, 0);
}

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ ?

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ํ”„๋กœํผํ‹ฐ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•  ๋•Œ ์œ ๋ฆฌํ•จ.

๋‹ค๋งŒ, this์— ํ• ๋‹น์€ ๋ชปํ•จ.


ํ• ๋‹น vs ๋ฐ”์ธ๋”ฉ

์‹๋ณ„์ž์™€ ๊ฐ’์„ ์ด์–ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๊ฑฐ์˜ ๋‘ ๊ฐœ๊ฐ€ ๋น„์Šทํ•œ ๊ฐœ๋…์ž„.


์ƒ์†์„ ์™œ ํ•˜๋Š”๊ฐ€..?

์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ!

๋ˆ„๊ฐ€ ํ•˜๋Š”๊ฐ€? ์ธ์Šคํ„ด์Šค๋“ค์˜ ๋ถ€๋ชจ, ์ฆ‰, ํ”„๋กœํ† ํƒ€์ž…์ด ํ•˜๋Š” ๊ฒƒ์ž„


this ์•”๊ธฐ์‚ฌํ•ญ 3๊ฐ€์ง€

  1. ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฉด ์ „์—ญ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
  2. ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธ
  3. ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์•ž์— ๋‚˜์˜จ ํ˜ธ์ถœ์ž๋ฅผ ์˜๋ฏธ

ํ”„๋กœํ† ํƒ€์ž…์€ ์™œ ์žˆ๋Š”๊ฐ€?

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์˜ฎ๊ธฐ๊ณ , ๊ทธ ์˜ฎ๊ธด ๋‚ด์šฉ์„ ์ธ์Šคํ„ด์Šค์—๊ฒŒ ์ƒ์†ํ•ด์ฃผ๋ ค๊ณ .

ํ”„๋กœํผํ‹ฐ๋Š” ๋Œ€๋ถ€๋ถ„ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒŒ ๋งž์Œ.

๋ฉ”์„œ๋“œ๋Š” ํ–‰์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์‚ฌ๋žŒ ์ด๋ฆ„์ด๋‚˜ ๋‚˜์ด ๊ฐ™์€ ๊ฒƒ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ž„.

function Person(name) {
  this.name = name;

  Person.prototype.sayHi = function () {
    console.log(`Hi! my name is ${this.name}.`);
    // ์ด๋Ÿฌ๋ฉด new ํ• ๋•Œ๋งˆ๋‹ค ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๊ณ„์† ์ƒ๊ธด๋‹ค.
  };
}

Person.prototype.sayHi = function () {
  console.log(`Hi! my name is ${this.name}.`);
  // ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋จ.
  // ๊ทธ๋Ÿฐ๋ฐ ๊ฐ€๋…์„ฑ์˜ ์ธก๋ฉด์—์„œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ž‘ ๊ฐ™์ด ์žˆ์–ด์•ผ ๋จ.
  // ์ง€๊ธˆ์€ ๋ฐ”๋กœ ๋ฐ‘์— ์žˆ์ง€๋งŒ ์ด๊ฑฐ๋ž‘ ์œ„์— ์ƒ์„ฑ์žํ•จ์ˆ˜ ์‚ฌ์ด์— 1000์ค„ ์ฝ”๋“œ ์žˆ์œผ๋ฉด?
  // ๊ฐ€๋…์„ฑ ์—„์ฒญ๋‚˜์จ.
  // ๊ทธ๋ž˜์„œ ์ด ๋‘ ๊ฐœ๊ฐ€ ๋”ฑ ๋ฌถ์—ฌ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Œ.

  // ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ๋ฉด ๋ฌถ์„ ์ˆ˜ ์žˆ์Œ.
};

const Person2 = (function () {
  function Person2(name) {
    this.name = name;
  }
  Person2.prototype.sayHi = function () {
    console.log(`Hi! my name is ${this.name}.`);
  };

  return Person2;
})();

const me = new Person2('Lee');
// ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์บก์Šํ™”๊ฐ€ ๋จ. ๊ทธ๋ž˜๋„ ์•„์‰ฌ์›€์ด ์žˆ์Œ.
// ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฐœ๋…์ด ํด๋ž˜์Šค!

์ธ์Šคํ„ด์Šค๊ฐ€ ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์–ด๋””์—์„œ ์ฐพ๋Š”๊ฐ€?

์Šค์ฝ”ํ”„ ์ฒด์ธ์˜ ๊ฒฝ์šฐ ์‹๋ณ„์ž ์ฐธ์กฐ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๊ณณ์—์„œ๋ถ€ํ„ฐ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•จ.

์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์„ ๋•Œ๋„ ์ž๊ธฐ ์ž์‹ ์—์„œ ๋จผ์ € ์ฐพ๊ณ , ๊ทธ ๋•Œ ์—†์œผ๋ฉด ์ƒ์œ„ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ์ฐพ๊ฒŒ๋จ.

๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ์‹๋ณ„์ž๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ๋งŒ์•ฝ ์‹๋ณ„์ž๋ผ๋ฉด ์Šค์ฝ”ํ”„์ฒด์ธ์—์„œ ์ฐพ์•„์•ผ ํ•จ.

๊ทธ๋ ‡์ง€๋งŒ, ํ”„๋กœํ† ํƒ€์ž…์€ ์ฒด์ธ ์ƒ์—์„œ ์ฐพ์Œ.

๊ทธ๋ž˜์„œ ํ”„๋กœํผํ‹ฐ(๋ฉ”์„œ๋“œ)๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ ์ฐพ๋Š” ๊ฒƒ์ด๊ณ , ์‹๋ณ„์ž๋Š” ์Šค์ฝ”ํ”„์ฒด์ธ์—์„œ ์ฐพ์Œ.

me.sayHi();

์—์„œ๋Š” ์‹๋ณ„์ž์ธ me๋Š” ์‹๋ณ„์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ง€์ผœ์•ผ ํ•จ.

๊ทธ๋Ÿฐ๋ฐ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœํผํ‹ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ง€ํ‚ค์ง€ ์•Š์•„๋„ ๋จ!

profile
์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๐ŸŒผ

0๊ฐœ์˜ ๋Œ“๊ธ€