This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

JavaScript์˜ ํƒ€์ž…๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ

๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” ๋‚ด์žฅ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ๋ณดํ†ต ๊ทธ ๋‚ด์šฉ์€ ์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” JavaScript์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๊ทธ ์†์„ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์„ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ธ์–ด ๊ฐœ์š”๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ์ •๋ฆฌ๋œ ๋‚ด์šฉ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋” ๋งŽ์€ ๋น„๊ต๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋™์  ๋ฐ ์•ฝํƒ€์ž…

JavaScript๋Š” ๋™์  ํƒ€์ž…์ด ์žˆ๋Š” ๋™์  ์–ธ์–ด์ž…๋‹ˆ๋‹ค. JavaScript์˜ ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ํŠน์ • ํƒ€์ž…๊ณผ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ• ๋‹น (๋ฐ ์žฌํ• ๋‹น) ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

js
let foo = 42; // foo๋Š” ์ด์ œ ์ˆซ์ž์ž…๋‹ˆ๋‹ค
foo = "bar"; // foo๋Š” ์ด์ œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค
foo = true; // foo๋Š” ์ด์ œ ๋ถˆ๋ฆฌ์–ธ์ž…๋‹ˆ๋‹ค

JavaScript๋Š” ๋˜ํ•œ ์•ฝํƒ€์ž… ์–ธ์–ด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ž‘์—…์— ํƒ€์ž… ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์‹ , ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์•”์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

js
const foo = 42; // foo๋Š” ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
const result = foo + "1"; // JavaScript๋Š” foo๋ฅผ ๋ฌธ์ž์—ด๋กœ ๊ฐ•์ œ ๋ณ€ํ™˜ํ•˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ํ”ผ์—ฐ์‚ฐ์ž์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
console.log(result); // 421

์•”์‹œ์  ํ˜•๋ณ€ํ™˜์€ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ์˜๋„๊ฐ€ ์—†๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์ˆซ์ž์—์„œ ๋ฌธ์ž์—ด ๋Œ€์‹ , ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ) ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜(footgun)๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ˜ธ ๋ฐ BigInts์˜ ๊ฒฝ์šฐ, JavaScript๋Š” ์˜๋„์ ์œผ๋กœ ํŠน์ • ์•”์‹œ์  ํƒ€์ž… ๋ณ€ํ™˜์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์›์‹œ ๊ฐ’(Primitive values)

Object๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํƒ€์ž…์€ ์–ธ์–ด์˜ ์ตœํ•˜์œ„ ์ˆ˜์ค€์—์„œ ์ง์ ‘ ํ‘œํ˜„๋˜๋Š” ๋ถˆ๋ณ€ ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ '์›์‹œ ๊ฐ’'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

null์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ธฐ๋ณธ ํƒ€์ž…์€ typeof ์—ฐ์‚ฐ์ž๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. typeof null์€ "object"๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ === null์„ ์‚ฌ์šฉํ•˜์—ฌ null์„ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

null ๋ฐ undefined๋ฅผ ์ œ์™ธํ•œ, ๋ชจ๋“  ์›์‹œ ํƒ€์ž…์—๋Š” ์›์‹œ ๊ฐ’์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ•ด๋‹น ๊ฐ์ฒด ๋ž˜ํผ ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Number ๊ฐ์ฒด๋Š” toExponential()์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›์‹œ ๊ฐ’์—์„œ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ฉด, JavaScript๋Š” ๊ฐ’์„ ํ•ด๋‹น ๋ž˜ํผ ๊ฐ์ฒด๋กœ ์ž๋™์œผ๋กœ ๊ฐ์‹ธ๋Š” ๋Œ€์‹  ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ null ๋˜๋Š” undefined์—์„œ ์†์„ฑ์— ์ ‘๊ทผํ•˜๋ฉด, TypeError ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์„ ํƒ์  ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž๋ฅผ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Type typeof return value Object wrapper
Null ํƒ€์ž… "object" N/A
Undefined ํƒ€์ž… "undefined" N/A
Boolean ํƒ€์ž… "boolean" Boolean
Number ํƒ€์ž… "number" Number
BigInt ํƒ€์ž… "bigint" BigInt
String ํƒ€์ž… "string" String
Symbol ํƒ€์ž… "symbol" Symbol

๊ฐ์ฒด ๋ž˜ํผ ํด๋ž˜์Šค์˜ ์ฐธ์กฐ ํŽ˜์ด์ง€์—๋Š” ๊ฐ ํƒ€์ž…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ๋ฐ ์†์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด์™€, ์›์‹œ ํƒ€์ž… ์ž์ฒด์˜ ์˜๋ฏธ ์ฒด๊ณ„์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Null ํƒ€์ž…

Null ํƒ€์ž…์€ null์ด๋ผ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Undefined ํƒ€์ž…

Undefined ํƒ€์ž…์€ undefined์ด๋ผ๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ, undefined๋Š” ๊ฐ’์ด ์—†์Œ์„ ์˜๋ฏธํ•˜๊ณ , null์€ ๊ฐ์ฒด๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (typeof null === "object"์— ๋Œ€ํ•œ ๋ณ€๋ช…์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ์–ธ์–ด์˜ ๊ธฐ๋ณธ๊ฐ’์€ undefined์ž…๋‹ˆ๋‹ค.

  • ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†๋Š” return๋ฌธ(return;)์€ ์•”์‹œ์ ์œผ๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด ์†์„ฑ์— ์ ‘๊ทผ (obj.iDontExist) ํ•˜๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ์ดˆ๊ธฐํ™”(let x;)๊ฐ€ ์—†๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๋ณ€์ˆ˜๋ฅผ undefined๋กœ ์•”์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • Array.prototype.find() ๋ฐ Map.prototype.get()์™€ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ”์„œ๋“œ๋Š”, ์š”์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

null์€ ์–ธ์–ด์˜ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์—์„  ๋œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์œ„์น˜๋Š” prototype chain์˜ ๋๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด์–ด์„œ, Object.getPrototypeOf(), Object.create() ๋“ฑ ํ”„๋กœํ† ํƒ€์ž…๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” undefined ๋Œ€์‹  null์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

null์€ ํ‚ค์›Œ๋“œ์ด์ง€๋งŒ, undefined๋Š” ์ „์—ญ ์†์„ฑ์ธ ์ผ๋ฐ˜์ ์ธ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” undefined๊ฐ€ ์žฌ์ •์˜๋˜๊ฑฐ๋‚˜ ๊ฐ€๋ ค์ ธ์„œ๋Š” ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ฐจ์ด๋Š” ๋ฏธ๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Boolean ํƒ€์ž…

Boolean ํƒ€์ž…์€ ๋…ผ๋ฆฌ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ true์™€ false ๋‘ ๊ฐ€์ง€์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆ๋ฆฌ์–ธ ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž , if...else, while ๋“ฑ์„ ํฌํ•จํ•œ, ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Number ํƒ€์ž…

Number ํƒ€์ž…์€ ๋ฐฐ์ •๋ฐ€๋„ 64๋น„ํŠธ ์ด์ง„ ํ˜•์‹ IEEE 754 ๊ฐ’์ž…๋‹ˆ๋‹ค. 2-1074 (Number.MIN_VALUE) ์™€ 21024 (Number.MAX_VALUE) ์‚ฌ์ด์˜ ์–‘์ˆ˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, -2-1074 ์™€ -21024 ์‚ฌ์ด์˜ ์Œ์ˆ˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, -(253 โˆ’ 1) (Number.MIN_SAFE_INTEGER) ์™€ 253 โˆ’ 1 (Number.MAX_SAFE_INTEGER) ๋ฒ”์œ„์˜ ์ •์ˆ˜๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด, JavaScript๋Š” ๋” ์ด์ƒ ์ •์ˆ˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐฐ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ทผ์‚ฌ๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. Number.isSafeInteger()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž๊ฐ€ ์•ˆ์ „ํ•œ ์ •์ˆ˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ยฑ(2-1074 to 21024) ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฐ’์€ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • Number.MAX_VALUE๋ณด๋‹ค ํฐ ์–‘์ˆ˜๊ฐ’์€ +Infinity๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • Number.MIN_VALUE๋ณด๋‹ค ์ž‘์€ ์–‘์ˆ˜๊ฐ’์€ +0์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • Number.MAX_VALUE๋ณด๋‹ค ์ž‘์€ ์Œ์ˆ˜๊ฐ’์€ -Infinity๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • Number.MIN_VALUE๋ณด๋‹ค ํฐ ์Œ์ˆ˜๊ฐ’์€ -0์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

+Infinity ๋ฐ -Infinity๋Š” ์ˆ˜ํ•™์—์„œ์˜ ๋ฌดํ•œ๋Œ€์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Number.POSITIVE_INFINITY ๋ฐ Number.NEGATIVE_INFINITY๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Number ํƒ€์ž…์—๋Š” ์—ฌ๋Ÿฌ ํ‘œํ˜„์ด ์žˆ๋Š” ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. 0์€ -0๊ณผ +0 ๋‘˜ ๋‹ค๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ 0์€ +0์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค). ์‹ค์ œ๋กœ๋Š”, ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๊ฐ„์— ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, +0 === -0์€ true์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
console.log(42 / +0); // Infinity
console.log(42 / -0); // -Infinity

NaN ("Not a Number")๋Š” ์‚ฐ์ˆ  ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์„ ๋•Œ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ์ˆซ์ž ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, "NaN" ์ž๊ธฐ ์ž์‹ ๊ณผ ๊ฐ™์ง€ ์•Š์€ JavaScript์˜ ์œ ์ผํ•œ ๊ฐ’์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ˆซ์ž๋Š” ๊ฐœ๋…์ ์œผ๋กœ "์ˆ˜ํ•™์ ์ธ ๊ฐ’"์ด๊ณ  ํ•ญ์ƒ ์•”์‹œ์ ์œผ๋กœ ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€๋งŒ, JavaScript๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์ ์šฉํ•  ๋•Œ ์ˆซ์ž๋Š” ๋จผ์ € 32๋น„ํŠธ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ๋น„ํŠธ ๋งˆ์Šคํ‚น์„ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋‚˜์˜ ์ˆซ์ž ์•ˆ์— ๋‹ค์ˆ˜์˜ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜์ง€๋งŒ ์ด๊ฑด ๋ณดํ†ต ๋‚˜์œ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค. JavaScript๋Š” ์ผ๋ จ์˜ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ (๋ฐฐ์—ด์ด๋‚˜ ๋ถˆ๋ฆฌ์–ธ ์†์„ฑ ๊ฐ’์„ ํ• ๋‹นํ•œ ๊ฐ์ฒด๋กœ) ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋น„ํŠธ ๋งˆ์Šคํ‚น์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ์ดํ•ดํ•˜๊ณ , ์œ ์ง€ํ•˜๊ธฐ ํž˜๋“ค๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค๋งŒ ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ํ•œ์ •๋œ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ์˜ ๋น„ํŠธ ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ์†Œ์ค‘ํ•œ ๊ทนํ•œ ์ƒํ™ฉ์ฒ˜๋Ÿผ ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฐ ๊ธฐ์ˆ ์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํŠธ ๋งˆ์Šคํ‚น์€ ์šฉ๋Ÿ‰ ์ตœ์ ํ™”์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

BigInt ํƒ€์ž…

BigInt ํƒ€์ž…์€ ์ž„์˜ ์ •๋ฐ€๋„๋กœ ์ •์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” JavaScript ์ˆซ์ž ์›์‹œ ๊ฐ’์ž…๋‹ˆ๋‹ค. BigInt๋กœ Number์˜ ์•ˆ์ „ํ•œ ์ •์ˆ˜ ์ œํ•œ(Number.MAX_SAFE_INTEGER)์„ ๋„˜์–ด์„œ๋Š” ํฐ ์ •์ˆ˜๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ณ  ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BigInt๋Š” ์ •์ˆ˜ ๋์— n์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ BigInt() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์ œ๋Š” Number.MAX_SAFE_INTEGER๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด, ์˜ˆ์ƒ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

js
// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // 9007199254740992n๋Š” 9007199254740993n๊ณผ ๊ฐ™์ง€ ์•Š์•„ false์ž…๋‹ˆ๋‹ค.

// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // ๋‘˜ ๋‹ค 9007199254740992 ์ด๊ธฐ ๋•Œ๋ฌธ์— true์ž…๋‹ˆ๋‹ค.

+, *, -, **, % ์—ฐ์‚ฐ์ž๋ฅผ BigInt์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธˆ์ง€๋œ ์—ฐ์‚ฐ์ž๋Š” >>>๋ฟ ์ž…๋‹ˆ๋‹ค. BigInt๋Š” Number์™€ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ ๋А์Šจํ•˜๊ฒŒ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

BigInt๋Š” ์†Œ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์—†์ง€๋งŒ, ํฐ ์ •์ˆ˜๋ฅผ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, BigInt ๊ฐ’์€ ์ˆซ์ž๋ณด๋‹ค ํ•ญ์ƒ ๋” ์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ๋œ ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํƒ€์ž…๋„ ๋‹ค๋ฅธ ํƒ€์ž…์„ ์ˆ˜๋ฐ˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์„œ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. TypeError๋Š” BigInt ๊ฐ’์ด ์‚ฐ์ˆ  ํ‘œํ˜„์‹์˜ ์ผ๋ฐ˜ ์ˆซ์ž์™€ ํ˜ผํ•ฉ๋˜๊ฑฐ๋‚˜ ์„œ๋กœ ์•”์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

String ํƒ€์ž…

String ํƒ€์ž…์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, UTF-16 ์ฝ”๋“œ ๋‹จ์œ„ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 16๋น„ํŠธ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜ ๊ฐ’์˜ ๋‚˜์—ด๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค. String์˜ ๊ฐ ์š”์†Œ๋Š” String ๋‚ด๋ถ€์˜ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ธ๋ฑ์Šค 0์—, ๋‹ค์Œ ์š”์†Œ๋Š” ์ธ๋ฑ์Šค 1์— ์žˆ์Šต๋‹ˆ๋‹ค. String์˜ ๊ธธ์ด๋Š” UTF-16 ์ฝ”๋“œ ๋‹จ์œ„์˜ ์ˆ˜์ด๋ฉฐ, ์‹ค์ œ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž ์ˆ˜์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ String ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

JavaScript String์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, String์ด ์ƒ์„ฑ๋˜๋ฉด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. String ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ String์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ String์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • substring()์„ ์‚ฌ์šฉํ•ด ์›๋ž˜ String์˜ ํ•˜์œ„ String์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž(+) ๋˜๋Š” concat()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

"๋ฌธ์ž์—ด์˜ ํƒ€์ž…ํ™”"๋ฅผ ์กฐ์‹ฌํ•˜๋ผ

๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ด ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งค๋ ฅ์ ์œผ๋กœ ๋ณด์ผ์ง€๋„ ๋ชจ๋ฅด๊ณ , ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ๋ฌธ์ž์—ด์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด์€ ๋””๋ฒ„๊น…์ด ์‰ฝ์Šต๋‹ˆ๋‹ค. (์ถœ๋ ฅ ๋‚ด์šฉ์ด ํ•ญ์ƒ ๋ฌธ์ž์—ด์˜ ๊ฐ’๊ณผ ๋™์ผ)
  • ๋ฌธ์ž์—ด์€ ๋งŽ์€ API(์ž…๋ ฅ ์นธ, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ’, responseText์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” XMLHttpRequest ๋“ฑ๋“ฑ)์˜ ๊ณตํ†ต ๋ถ„๋ชจ์ด๋ฉฐ ๋ฌธ์ž์—ด๋กœ๋งŒ ์ž‘์—…ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทœ์น™์„ ํ†ตํ•ด, ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๋„ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒŒ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ตฌ๋ถ„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด (๋ฌผ๋ก  JavaScript ๋ฐฐ์—ด์ด ๋” ์ ํ•ฉํ•˜๊ฒ ์ง€๋งŒ) ๋ฌธ์ž์—ด๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ‰๋‚ด๋‚ผ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌ๋ถ„์ž๋ฅผ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ง๊ฐ€์ง€๊ณ  ๋ง™๋‹ˆ๋‹ค. ์ด์ œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž๋ฅผ ์„ ํƒํ•˜๊ณ , ๋“ฑ๋“ฑ... ์ด ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ž์˜ ๊ทœ์น™์„ ํ•„์š”๋กœ ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์—๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•  ๋• ๋ฌธ์ž์—ด์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ ํ•ฉํ•œ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Symbol ํƒ€์ž…

Symbol์€ ๊ณ ์œ ํ•˜๊ณ  ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์›์‹œ ๊ฐ’์ด๋ฉฐ ๊ฐ์ฒด์˜ ์†์„ฑ(์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”) ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์—์„  "์›์ž"๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํ˜ธ์˜ ๋ชฉ์ ์€ ๋‹ค๋ฅธ ์ฝ”๋“œ์˜ ํ‚ค์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ๋˜๋Š” ๊ณ ์œ ํ•œ ์†์„ฑ ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด

์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ์˜ ๊ฐ์ฒด๋ž€ ์‹๋ณ„์ž๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ฐ’์„ ๋งํ•ฉ๋‹ˆ๋‹ค. JavaScript์—์„œ ๊ฐ์ฒด๋Š” ์œ ์ผํ•œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. Functions๋Š” ์‚ฌ์‹ค callable ์ด๋ผ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฐ์ฒด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ

JavaScript์—์„œ์˜ ๊ฐ์ฒด๋Š” ์†์„ฑ์˜ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ œํ•œ์ ์œผ๋กœ ์†์„ฑ์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜์˜ ์žˆ๊ณ , ๊ทธ ํ›„์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์†์„ฑ์€ ํ‚ค-๊ฐ’ ์Œ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์†์„ฑ ํ‚ค๋Š” stringsํƒ€์ž… ๋˜๋Š” symbolsํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†์„ฑ ๊ฐ’์œผ๋กœ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•ด ๋ชจ๋“  ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ตฌ์ถ•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด ์†์„ฑ์—๋Š” ๋ฐ์ดํ„ฐ ์†์„ฑ๊ณผ ์ ‘๊ทผ์ž ์†์„ฑ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์†์„ฑ์—๋Š” ๋‹ค์‹œ 'ํŠน์„ฑ'(attribute)๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํŠน์„ฑ์€ JavaScript ์—”์ง„ ๋‚ด๋ถ€์—์„œ๋Š” ์ ‘๊ทผ๋˜์ง€๋งŒ, Object.defineProperty()๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•˜๊ฑฐ๋‚˜, Object.getOwnPropertyDescriptor() ๋ฅผ ํ†ตํ•ด ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Object.defineProperty()์—์„œ ๋” ์•Œ์•„๋ณด์„ธ์š”.

๋ฐ์ดํ„ฐ ์†์„ฑ

๋ฐ์ดํ„ฐ ์†์„ฑ์€ ํ‚ค๋ฅผ ๊ฐ’๊ณผ ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

value

์†์„ฑ์˜ get ์ ‘๊ทผ์œผ๋กœ ๊ฒ€์ƒ‰๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  JavaScript์˜ ๊ฐ’์ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

writable

ํ• ๋‹น์œผ๋กœ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค.

enumerable

A boolean value indicating if the property can be enumerated by a for...in loop. See also Enumerability and ownership of properties for how enumerability interacts with other functions and syntaxes.

์†์„ฑ์„ for...in ๋ฃจํ”„๋กœ ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์—ด๊ฑฐ ๊ฐ€๋Šฅ์„ฑ์ด ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋ฐ ๊ตฌ๋ฌธ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์†์„ฑ ์—ด๊ฑฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ์†Œ์œ ๊ถŒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

configurable

์†์„ฑ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์ ‘๊ทผ์ž ์†์„ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์ ‘๊ทผ์ž ์†์„ฑ

์ ‘๊ทผ์ž ์†์„ฑ์€ ํ‚ค๋ฅผ ๋‘ ๊ฐœ์˜ ์ ‘๊ทผ์ž ํ•จ์ˆ˜(get, set) ์ค‘ ํ•˜๋‚˜์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์ ‘๊ทผ์ž '๋ฉ”์„œ๋“œ'๊ฐ€ ์•„๋‹ˆ๋ผ ์ ‘๊ทผ์ž '์†์„ฑ'์ž„์„ ์ธ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ๊ฐ์ฒด์— ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ ‘๊ทผ์ž๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  ๊ทธ ๊ฐ์ฒด๊ฐ€ ํด๋ž˜์Šค๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ ‘๊ทผ์ž ์†์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

get

๊ฐ’์— ๋Œ€ํ•œ get ์ ‘๊ทผ์ด ์ˆ˜ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์†์„ฑ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ๋น„์–ด ์žˆ๋Š” ์ธ์ˆ˜ ๋ชฉ๋ก์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. getters๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”. undefined์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

set

ํ• ๋‹น๋œ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ง€์ •๋œ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. setters๋„ ์ฐธ๊ณ ํ•˜์„ธ์š”. undefined์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

enumerable

์†์„ฑ์„ for...in ๋ฃจํ”„๋กœ ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์—ด๊ฑฐ ๊ฐ€๋Šฅ์„ฑ์ด ๋‹ค๋ฅธ ํ•จ์ˆ˜ ๋ฐ ๊ตฌ๋ฌธ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์†์„ฑ ์—ด๊ฑฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ์†Œ์œ ๊ถŒ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

configurable

์†์„ฑ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ๋ฐ์ดํ„ฐ ์†์„ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๊ฐ์ฒด์˜ prototype์€ ๋‹ค๋ฅธ ๊ฐ์ฒด ๋˜๋Š” null์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋…์ ์œผ๋กœ ๊ฐ์ฒด์˜ ์ˆจ๊ฒจ์ง„ ์†์„ฑ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ [[Prototype]]์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ [[Prototype]]์†์„ฑ์€ ๊ฐ์ฒด ์ž์ฒด์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด๋Š” ์ž„์‹œ ํ‚ค-๊ฐ’ ์Œ์ด๋ฏ€๋กœ, ์ข…์ข… ๋งต์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ์ฒด ๊ณตํ•™, ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด, Map์„ ์‚ฌ์šฉํ•˜์„ธ์š”. Map ์ฐธ์กฐ์—๋Š” ํ‚ค-๊ฐ’ ์—ฐ๊ฒฐ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€ Map ๊ฐ„์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ ์งœ

๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ์˜ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์€ JavaScript ๋‚ด์žฅ Date ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค ์ปฌ๋ ‰์…˜: ๋ฐฐ์—ด๊ณผ ํ˜•์‹ํ™” ๋ฐฐ์—ด

๋ฐฐ์—ด์€ ์ •์ˆ˜ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์†์„ฑ๊ณผ length ์†์„ฑ ์‚ฌ์ด์— ํŠน๋ณ„ํ•œ ์—ฐ๊ด€์„ ์ง€์–ด๋†“์€ ์ผ๋ฐ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ด์— ๋”ํ•ด, ๋ฐฐ์—ด์€ ๋ฐฐ์—ด์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŽธ๋ฆฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” Array.prototype์—์„œ ์ƒ์†๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, indexOf()๋Š” ๋ฐฐ์—ด์—์„œ ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๊ณ , push()๋Š” ๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์€ ์ •๋ ฌ๋œ ๋ชฉ๋ก์„ ๋‚˜ํƒ€๋‚ด๋Š” ์™„๋ฒฝํ•œ ํ›„๋ณด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ˜•์‹ํ™” ๋ฐฐ์—ด(Typed Arrays)์€ ์•ˆ์ชฝ์˜ ์ด์ง„ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ์— ๋Œ€ํ•ด ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ทฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ฐฐ์—ด๊ณผ ์˜๋ฏธ ์ฒด๊ณ„๊ฐ€ ์œ ์‚ฌํ•œ ๋งŽ์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. "(ํ˜•์‹ํ™” ๋ฐฐ์—ด)Typed Array"์€ Int8Array, Float32Array ๋“ฑ์„ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ๊ด„์ ์ธ ์šฉ์–ด์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ typed array์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. Typed Array๋Š” ์ข…์ข… ArrayBuffer ๋ฐ DataView์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ‚ค ์ปฌ๋ ‰์…˜: Maps, Sets, WeakMaps, WeakSets

ํ‚ค ์ปฌ๋ ‰์…˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ‚ค๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค. Set๊ณผ WeakSet์€ ๊ณ ์œ ํ•œ ๊ฐ’์˜ ๋ชจ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ณ , Map๊ณผ WeakMap์€ ๊ฐ์ฒด์™€ ๊ฐ’์„ ์—ฐ๊ฒฐ ์ง“๋Š” ์Œ๋“ค์˜ ๋ชจ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Map๊ณผ Set์„ ์ง์ ‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋น„๊ต(<, '์ž‘์Œ' ๋น„๊ต์™€ ๊ฐ™์ด)ํ•  ๋ฐฉ๋ฒ•์€ ์—†๊ณ , ์—”์ง„๋„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์กฐํšŒ ์„ฑ๋Šฅ์ด ํ•„์—ฐ์ ์œผ๋กœ ์„ ํ˜•์ž…๋‹ˆ๋‹ค. (WeakMap์„ ํฌํ•จํ•ด) ๋„ค์ดํ‹ฐ๋ธŒ ๊ตฌํ˜„์€ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋กœ๊ทธํ•จ์ˆ˜์˜ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต DOM ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•  ๋• ํ•ด๋‹น ๊ฐ์ฒด์— ์ง์ ‘ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ data-* ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜๊ฒ ์ง€๋งŒ, ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ์—์„œ ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Map๊ณผ WeakMap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์‰ฝ๊ฒŒ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WeakMap ๋ฐ WeakSet์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ๋˜๋Š” ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ๊ธฐํ˜ธ๋งŒ ํ‚ค๋กœ ํ—ˆ์šฉํ•˜๋ฉฐ, ํ‚ค๊ฐ€ ์ปฌ๋ ‰์…˜์— ๋‚จ์•„์žˆ์–ด๋„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐํ™”๋œ ์ž๋ฃŒ: JSON

JSON(JavaScript Object Notation)์€ ๊ฒฝ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹์œผ๋กœ, JavaScript์—์„œ ํŒŒ์ƒ๋์ง€๋งŒ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JSON์€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ๊ณผ ์–ธ์–ด ๊ฐ„์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ JSON๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋” ๋งŽ์€ ๊ฐ์ฒด

JavaScript๋Š” ๋‚ด์žฅ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์žฅ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ์ฐธ๊ณ ์„œ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”.

ํƒ€์ž… ๊ฐ•์ œ ๋ณ€ํ™˜

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, JavaScript๋Š” ์•ฝํƒ€์ž… ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ํƒ€์ž…์ด ์˜ˆ์ƒ๋˜๋Š” ํ•˜๋‚˜์˜ ํƒ€์ž…์˜ ๊ฐ’์„ ์ž์ฃผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ธ์–ด์—์„œ ์ด๋ฅผ ์ ํ•ฉํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, JavaScript๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ•์ œ ๋ณ€ํ™˜ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์›์‹œ ํƒ€์ž… ๊ฐ•์ œ ๋ณ€ํ™˜

์›์‹œ ํƒ€์ž… ๊ฐ•์ œ ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค๋Š” ์›์‹œ ๊ฐ’์ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์‹ค์ œ ํƒ€์ž…์ด ๋ฌด์—‡์ด์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์„ ํ˜ธ๋„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ string, number ๋˜๋Š” BigInt์ด ๋™๋“ฑํ•˜๊ฒŒ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Date() ์ƒ์„ฑ์ž๋Š” Date ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ๋ฐ›๋Š” ๊ฒฝ์šฐ, String์€ ๋‚ ์งœ String์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ˜๋ฉด, ์ˆซ์ž๋Š” ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • + ์—ฐ์‚ฐ์ž, ํ•˜๋‚˜์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ String์ด๋ฉด String ์—ฐ๊ฒฐ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • == ์—ฐ์‚ฐ์ž, ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜๊ฐ€ ์›์‹œ ํƒ€์ž…์ด๊ณ  ๋‹ค๋ฅธ ํ”ผ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ, ๊ฐ์ฒด๋Š” ์„ ํ˜ธ ํƒ€์ž…์ด ์—†๋Š” ์›์‹œ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์€ ๊ฐ’์ด ์ด๋ฏธ ์›์‹œ ํƒ€์ž…์ธ ๊ฒฝ์šฐ, ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” [@@toPrimitive]() (ํžŒํŠธ๋กœ "default" ์‚ฌ์šฉ), valueOf(), toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ฐจ๋ก€๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์›์‹œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์›์‹œ ํƒ€์ž… ๋ณ€ํ™˜์€ toString() ์ด์ „์— valueOf()๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋Š” ์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜์˜ ๋™์ž‘๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, string ๊ฐ•์ œ ๋ณ€ํ™˜๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

[@@toPrimitive]() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์›์‹œ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด TypeError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. valueOf() ๋ฐ toString()์˜ ๊ฒฝ์šฐ, ํ•˜๋‚˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฐ˜ํ™˜ ๊ฐ’์€ ๋ฌด์‹œ๋˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์›์‹œ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉด TypeError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

js
console.log({} + []); // "[object Object]"

{} ๋˜๋Š” []์—๋Š” [@@toPrimitive]() ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. {} ๋ฐ [] ๋ชจ๋‘ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Object.prototype.valueOf์—์„œ valueOf()๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์€ ๊ฐ์ฒด์ด๋ฏ€๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ toString()์ด ๋Œ€์‹  ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. {}.toString()์€ "[object Object]"๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ฉด, [].toString()๋Š” ""๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ๊ฒฐ๊ณผ๋Š” ์—ฐ๊ฒฐ๋œ ๊ฐ’์ธ "[object Object]"์ž…๋‹ˆ๋‹ค.

[@@toPrimitive]() ๋ฉ”์„œ๋“œ๋Š” ์›์‹œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ํ•ญ์ƒ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ์›์‹œ ํƒ€์ž… ๋ณ€ํ™˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ valueOf()๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ • [@@toPrimitive]() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋ชจ๋“  ์›์‹œ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Date ๋ฐ Symbol ๊ฐ์ฒด๋Š” [@@toPrimitive]() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ์œ ์ผํ•œ ๋‚ด์žฅ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Date.prototype[@@toPrimitive]()๋Š” "default" ํžŒํŠธ๋ฅผ "string"์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ˜๋ฉด, Symbol.prototype[@@toPrimitive]()๋Š” ํžŒํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ํ•ญ์ƒ ๊ธฐํ˜ธ(symbol)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜

Number ๋ฐ BigInt์˜ ๋‘ ๊ฐ€์ง€ ์ˆซ์ž ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์–ธ์–ด๋Š” ํŠน๋ณ„ํžˆ ์ˆซ์ž ๋˜๋Š” BigInt(์˜ˆ: ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์ž์—ฌ์•ผ ํ•˜๋Š” Array.prototype.slice())๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š”, ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ํ”ผ์—ฐ์‚ฐ์ž์˜ ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์•”์‹œ์  ๋ณ€ํ™˜์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์—„๊ฒฉํ•œ ๊ฐ•์ œ ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜ ๋ฐ BigInt ๊ฐ•์ œ ๋ณ€ํ™˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜์€ BigInt๊ฐ€ TypeError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋Œ€์‹  ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์ˆ˜ ๊ฐ•์ œ ๋ณ€ํ™˜(number coercion)ํ•˜๊ณ  ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜์€ Number์™€ BigInt ๋ชจ๋‘์— ๋Œ€ํ•ด ์˜ค๋ฒ„๋กœ๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์˜ˆ์™ธ๋Š” ํ•ญ์ƒ ์ˆซ์ž ๊ฐ•์ œ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จํ•ญ ๋”ํ•˜๊ธฐ์ž…๋‹ˆ๋‹ค.

๊ธฐํƒ€ ๊ฐ•์ œ ๋ณ€ํ™˜

Null, Undefined ๋ฐ Symbol์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” ๊ฐ๊ฐ์˜ ๊ฐ•์ œ ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ string ๊ฐ•์ œ ๋ณ€ํ™˜, ๋ถˆ๋ฆฌ์–ธ(boolean) ๊ฐ•์ œ ๋ณ€ํ™˜ ๋ฐ ๊ฐ์ฒด ๊ฐ•์ œ ๋ณ€ํ™˜์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋ˆˆ์น˜์ฑ„์…จ๊ฒ ์ง€๋งŒ, ๊ฐ์ฒด๋ฅผ ์›์‹œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ ๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒฝ์šฐ์—, [@@toPrimitive]()์ด ์žˆ์œผ๋ฉด ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๊ณ , ์›์‹œ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, valueOf ๋˜๋Š” toString์€ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๊ณ , ์„ฑ๊ณตํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์›์‹œ ํƒ€์ž…์ž„์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ์›์‹œ ํƒ€์ž…์€ ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ๊ฐ•์ œ ์ ์šฉ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ฐ™์ด ๋ณด๊ธฐ