๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
javascript/๐Ÿ“– study

[4์ฃผ์ฐจ ์Šคํ„ฐ๋””] 21์žฅ- ๋นŒํŠธ์ธ ๊ฐ์ฒด

by HomieKim 2022. 2. 23.

๋นŒํŠธ์ธ ๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ๋ถ„๋ฅ˜

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ๊ฒŒ 3๊ฐœ์˜ ๊ฐ์ฒด๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ‘œ์ค€ ๋นŒํŠธ์ธ๊ฐ์ฒด

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

    • ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด

      ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋Š” ECMAScript ์‚ฌ์–‘์— ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ™˜๊ฒฝ (browser๋˜๋Š” Node.js)์—์„œ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด
      ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ : DOM, BOM, Canvas, XMLHttpRequest ๋“ฑ์˜ WebAPI์ œ๊ณต
      Node.js ํ™˜๊ฒฝ : path, os ๋“ฑ node.js ์—์„œ ๊ณ ์œ ์˜ API ์ œ๊ณต ๊ณต์‹๋ฌธ์„œ ์ฐธ์กฐ

    • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด

      ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด๋Š” ๋ง๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” Object, String ,Number ๋“ฑ 40์—ฌ๊ฐœ์˜ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด ์ œ๊ณต
  • Math, Reflect, JSON์„ ์ œ์™ธํ•œ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋Š” ๋ฌด๋‘ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด
  • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์˜ prototype์— ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ์ฒด
// String ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ String ๊ฐ์ฒด ์ƒ์„ฑ
const strObj = new String('Lee'); // String {"Lee"}

// String ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ strObj ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž…์€ String.prototype์ด๋‹ค.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true

์›์‹œ๊ฐ’๊ณผ ๋ž˜ํผ ๊ฐ์ฒด

  • ๋ฌธ์ž์—ด์ด๋‚˜ ,์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ์€ ์›์‹œ๊ฐ’์ด ์กด์žฌํ•จ์—๋„ ๋นŒํŠธ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•จ
  • ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฒฝ์šฐ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผ ๊ฐ€๋Šฅ (= ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ผ์‹œ์ ์œผ๋กœ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ)
  • ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์ž…์‹œ ๊ฐ์ฒด๋Ÿฌ ๋ž˜ํผ ๊ฐ์ฒด(wrapper object)๋ผ๊ณ  ํ•จ
  • ์ผ์‹œ์ ์œผ๋กœ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋˜๊ณ  ํ•ด๋‹น ์ฝ”๋“œ ์‹คํ–‰ ํ›„ ์‹๋ณ„์ž๊ฐ€ ์›๋ž˜์˜ ์›์‹œ๊ฐ’์„ ๊ฐ–๋„๋ก ๋˜๋Œ๋ฆฌ๊ณ  ๋ž˜ํผ ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์—์˜ํ•ด ์‚ญ์ œ๋จ

์ „์—ญ ๊ฐ์ฒด

  • ์ „์—ญ ๊ฐ์ฒด๋Š” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „ ๋‹จ๊ณ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์–ด๋–ค ๊ฐ์ฒด๋ณด๋‹ค ๋จผ์ € ์ƒ์„ฑ๋˜๋Š” ์ตœ์ƒ์œ„ ๊ฐ์ฒด
  • ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ
    • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด
    • ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด
    • var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ „์—ญ ํ•จ์ˆ˜
  • ํŠน์ง•
    • ์ „์—ญ ๊ฐ์ฒด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ window(๋˜๋Š” global)๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‹คํ–‰ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” node.js)์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • let์ด๋‚˜ const๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋‹ค
    • ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•œ๋‹ค. ์ฆ‰, ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด๋„ ํ•˜๋‚˜์˜ ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•จ

      ๋นŒํŠธ์ธ ์ „์—ญ ํ”„๋กœํผํ‹ฐ

  • Infinity : ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’
  • NaN(Not-a-Number) : ์ˆซ์ž๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž ๊ฐ’
  • undefined : ๋นŒํŠธ์ธ ์ „์—ญ ํ”„๋กœํผํ‹ฐ์ธ undefined๋Š” ์›์‹œ๊ฐ’ undefined๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์ง

๋นŒํŠธ์ธ ์ „์—ญ ํ•จ์ˆ˜

  • ์ „์—ญ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒํŠธ์ธ ํ•จ์ˆ˜ (์ „์—ญ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ)
  • isNaN : ์ „๋‹ฌ ๋ฐ›์€ ์ธ์ˆ˜๊ฐ€ NaN์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ๋ฐ˜ํ™˜, ์ธ์ˆ˜๋ฅผ ์ˆซ์ž ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰
  • parseInt : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋กœ, ์ฆ‰ ์‹ค์ˆ˜๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜
  • parseInt : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ์ •์ˆ˜๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜
  • encodeURI / decodeURI


encodeURIํ•จ์ˆ˜๋Š” URI(Uniform Resource Identifier)๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ ๋ฐ›์•„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ธ์ฝ”๋”ฉํ•œ๋‹ค.

์ธ์ฝ”๋”ฉ์ด๋ž€ ๋ฌธ์ž๋“ค์„ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์‹œ์Šคํ…œ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•„์Šคํ‚ค ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ
๋””์ฝ”๋”ฉ์€ ์ธ์ฝ”๋”ฉ๋œ URI๋ฅผ ์ด์Šค์ผ€์ดํ”„์ฒ˜๋ฆฌ ์ด์ „์œผ๋กœ ๋””์ฝ”๋”ฉ ํ•˜๋Š” ๊ฒƒ

์•”๋ฌต์  ์ „์—ญ

  • ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž๊ฐ€ ๋งˆ์น˜ ์ „์—ญ๋ณ€์ˆ˜ ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์•”๋ฌต์  ์ „์—ญ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹น ํ•˜๊ฒŒ ๋˜๋ฉด ์ „์—ญ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ํ˜„์ƒ ๋ฐœ์ƒ
  • ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋ฟ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ”„๋กœํผํ‹ฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— delete๋กœ ์‚ญ์ œ ๊ฐ€๋Šฅ
// ์ „์—ญ ๋ณ€์ˆ˜ x๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•œ๋‹ค.
console.log(x); // undefined
// ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ง€ ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์ธ y๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
console.log(y); // ReferenceError: y is not defined

var x = 10; // ์ „์—ญ ๋ณ€์ˆ˜

function foo () {
  // ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹น
  y = 20; // window.y = 20;
}
foo();

// ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž y๋ฅผ ์ „์—ญ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
console.log(x + y); // 30

๋Œ“๊ธ€