๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[JS Tam9์ƒํ™œ] #5 ํ”„๋กœํผํ‹ฐ ์†์„ฑ๊ณผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

by Tamii 2021. 7. 26.
๋ฐ˜์‘ํ˜•

๐Ÿ“’16 - ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

[[]]

๋‚ด๋ถ€์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ
JS์—”์ง„์˜ ๊ตฌํ˜„์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•˜๋Š” ECMA Script ์‚ฌ์–‘์˜ ์˜์‚ฌ ํ”„๋กœํผํ‹ฐ์™€ ์˜์‚ฌ ๋ฉ”์„œ๋“œ
๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ์Šฌ๋กœ๊ณผ ๋ฉ”์„œ๋“œ

[[Prototype]]

๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๋‚ด๋ถ€์Šฌ๋กฏ
proto๋กœ ๊ฐ„์ ‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ

const a = {}
a.[[Prototype]] // SyntaxError
a.__proto__ // Object.prototype

JS ์—”์ง„์€ ํ”„๋กœํผํ‹ฐ ์ƒ์„ฑ์‹œ ํ”„๋กœํผํ‹ฐ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(ํ”„๋กœํผํ‹ฐ์˜์ƒํƒœ)๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ •์˜

๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ

ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ
ex) [[Value]], [[Writable]]... ํ”„๋กœํผํ‹ฐ ์ƒ์„ฑ์‹œ [[Value]]๊ฐ’ : ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋จ

์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ(๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ์ฝ์„๋•Œ ํ˜ธ์ถœ๋˜๋Š”)
๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ณ  ์ €์žฅํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ

  • ์ž์ฒด์ ์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์Œ

getter / setter

==์ ‘๊ทผ์ž ํ•จ์ˆ˜
์ž์ฒด์ ์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜์ค‘ ๋Œ€ํ‘œ์ ์ธ ํ•จ์ˆ˜๋“ค

๊ฐ์ฒด ๋ณ€๊ฒฝ ๋ฐฉ์ง€

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

Object.seal : ๊ฐ์ฒด๋ฐ€๋ด‰
Object.freeze : ๊ฐ์ฒด ๋™๊ฒฐ


๐Ÿ“’17 - ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ

๊ฐ์ฒด์˜ ์ƒ์„ฑ๋ฐฉ์‹ 1) ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹ 2) ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ฐฉ์‹

1) ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹

์ง๊ด€์ ์ด๊ณ  ๊ฐ„ํŽธํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์ด์ง€๋งŒ, ๋™์ผํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•ด์•ผ ํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กญ๋‹ค

2) ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ฐฉ์‹

new ์—ฐ์‚ฌ๋Šฅ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜ ( ๋นŒํŠธ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ : Object,String,Number...)
ํ”„๋กœํผํ‹ฐ ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•œ ๊ฐ์ฒด ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ํŽธ๋ฆฌํ•˜๋‹ค

์ƒ์„ฑ์ž ํ•ฉ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๊ณผ์ •

new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ฒŒ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด JS ์—”์ง„์€ ์•”๋ฌต์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐ”์ธ๋”ฉ: ์‹๋ณ„์ž์™€ ๊ฐ’์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ • (๋ณ€์ˆ˜์„ ์–ธ : ์‹๋ณ„์ž์ธ ๋ณ€์ˆ˜์ด๋ฆ„๊ณผ ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•˜๋Š”๊ฒƒ )

  1. ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์•”๋ฌต์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ๊ฒƒ์„ this์— ๋ฐ”์ธ๋”ฉ
  2. ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™” : ์ธ์Šคํ„ด์Šค์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์ „๋‹ฌ๋ฐ›์€ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
  3. ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜: return ์ด ๋”ฐ๋กœ ์—†์œผ๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ this ๋ฐ˜ํ™˜

-> return ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ƒ์„ฑ์žํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ํ›ผ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€์–‘

ํ•จ์ˆ˜ ๊ฐ์ฒด

๋ชจ๋“  ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์„ฑ์žํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•  ์ˆœ ์—†๋‹ค
ํ•จ์ˆ˜๊ฐ€ ์–ด๋”” ํ• ๋‹น๋œ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์ •์˜๋ฐฉ์‹์— ๋”ฐ๋ผ constructor,non-constructor์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.

constructorํ•จ์ˆ˜

[[Call]], [[Constructor]]
์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜์ •์˜ : ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ(funciton foo(){} , ํ•จ์ˆ˜ ํ‘œํ˜„์‹var a = function foo(x){}, ํด๋ž˜์Šค

non-constructor ํ•จ์ˆ˜

[[Call]]
๋ฉ”์„œ๋“œ const obj ={x(){} }, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜cosnt a =()=>{}

ํ•จ์ˆ˜๋ฅผ ๊ทธ๋ƒฅ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๊ณผ new ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์—” ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜? [โ“์งˆ๋ฌธ]

ํ•จ์ˆ˜๋ฅผ new์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋ฉด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๊ณ  ํ•จ์ˆ˜ ๋‚ด๋ถ€๋ฉ”์„œ๋“œ [[Constructor]]๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.
์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ this: ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด
์ผ๋ฐ˜ ํ•จ์ˆ˜(๊ทธ๋ƒฅ ์„ ์–ธํ•œ ํ•จ์ˆ˜)์˜ this : ์ „์—ญ๊ฐ์ฒด window๋ฅผ ๊ฐ€๋ฆฌํ‚ด (๋ธŒ๋ผ์šฐ์ €:window, nodejs: global)
๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ์ฒซ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœํ•ด(ํŒŒ์Šค์นผ์ผ€์ด์Šค) ์ผ๋ฐ˜ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๋นŒํŠธ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜(Object, String,Number,Boolean,Function,Array, Data,RegExp,Promie)๋Š” new ์—†์ด ํ˜ธ์ถœํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค

๋Œ“๊ธ€