ํ๋ก์ ๊ฐ์ฒด๋ ์ด๋ค ๋์์ ๊ธฐ๋ณธ์ ์ธ ๋์(์์ฑ ์ ๊ทผ, ํ ๋น, ์ํ, ์ด๊ฑฐ, ํจ์ ํธ์ถ ๋ฑ)์ ์์ ์ ๊ฐ๋ก์ฑ์ ํน๋ณํ ๋ค๋ฅธ ๋์(ํธ๋ฉ)์ ํ ์ ์๊ฒ ํ๋ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋ก์ ๊ฐ์ฒด๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ค.
- target : ํ๋ก์ํ ๋์
- handler : target์ ๋์์ ๊ฐ๋ก์ฑ๊ณ ์ด๋ ํ ๋ค๋ฅธ ๋์์ ํ ๊ฒ์ธ์ง ์ค์ ๋์ด ์๋ ํจ์
ํ๋ก์๋ ์๋์ ๊ฐ์ด ์ ์ํ๋ค.
const proxy = new Proxy(target, handler)
๋จผ์ ํธ๋ค๋ฌ๊ฐ ์๋ ์๋ ์ฝ๋์ ๊ฐ์ ํ๋ก์๋ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
const target= {};
const proxy = new Proxy(target, {}) //ํธ๋ค๋ฌ๊ฐ ์๋ proxy ๊ฐ์ฒด ์ ์
proxy.test = 5; // 1. proxy์ ์๋ก์ด ํ๋กํผํฐ 'test' ์ถ๊ฐ
console.log(proxy.test) // 2. proxy์ test ํ๋กํผํฐ๋ฅผ ์ฝ์ ์ ์๋ค. ๋น์ฐํ 5๊ฐ ์ถ๋ ฅ
console.log(target.test) // 3. ์๋ ๊ฐ์ฒด์ธ target์ test ํ๋กํผํฐ์๋ 5๊ฐ ์ ์ฅ๋๋ค
๋ง์ฝ ํธ๋ค๋ฌ๊ฐ ์ ์ธ๋์ง ์์ ํ๋ก์๋ผ๋ฉด, target ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๋ ํฌ๋ช ํ ๋ํผ(wrapper)๊ฐ ๋๋ค.
๊ทธ๋ผ ์ด์ ์ด๋ค ๋์์ด ๋ฐ์ํ์ ๋ ์์ ์ ๊ฐ๋ก์ฑ์ ๋ค๋ฅธ ๋์์ ํ ์ ์๋์ง์ ๋ํด์ ๋ํ์ ์ผ๋ก ์๋์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ํ์ ์ผ๋ก get๊ณผ set์ ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด์ ์ตํ๋ณด์
get
const handler = {
get: function(target, prop){
return prop=='name'? `${target.a} ${target.b}` : target[prop]
}
}
const p = new Proxy({a:'KUNDOL', b:'IS AMUMU ZANGIN'}, handler);
console.log(p.name); //KUNDOL IS AMUMU ZANGIN
ํ๋ก์ ๊ฐ์ฒด์ get ํจ์๋ ํ๊ฒ์ ์ด๋ค ์์ฑ์ ์ฝ์ ๋ ํธ๋ฉ์ ๋ฐ๋ํ๋ค.
get ํจ์๋ ๋ณดํต 2๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
- target : new Proxy ์ ์ธ ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฃผ์๋ target ๊ฐ์ฒด
- prop : ์กฐํํ ์์ฑ์ ์ด๋ฆ
target์ผ๋ก a ์์ฑ๊ณผ b ์์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฃ๊ณ , handler ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ p๋ผ๋ ๋ณ์์ ์ ์ธํ๋ค.
์ดํ p์ name ์์ฑ์ ์ฐธ์กฐํด์ handler ํจ์์ get ์์ ์ ์ธํ ํจ์๊ฐ ์คํ๋๋ค.
์ด ๊ฒฝ์ฐ์ ์ฐธ์กฐํ ์์ฑ์ ์ด๋ฆ์ด 'name'์ผ ๊ฒฝ์ฐ a, b ์์ฑ ๊ฐ์ ํฉ์ณ์ ๋ฌธ์์ด์ ๋ง๋ค์ด ๋ฆฌํดํ๊ณ , ์๋ ๊ฒฝ์ฐ target์ ์ฐธ์กฐํ ์์ฑ์ ๋ฆฌํดํ๋ ๋ก์ง์ ๋ฐ๋ฅธ๋ค.
์ด์ ๊ฐ์ด ํน์ ์์ฑ์ ์ ๊ทผํ ๋ ๊ทธ ๋ถ๋ถ์ ๊ฐ๋ก์ฑ์ ์ด๋ค ๋ก์ง์ ๊ฐ์ ๋ก ์ํํ ์ ์๋ค.
Set
const target= {};
const proxy = new Proxy(target, {
set(target, prop, value){
console.log(target,prop, value)
}
})
proxy.test = 5; // ์ถ๋ ฅ: {} test 5
set ํจ์๋ ํ๊ฒ์ ์ด๋ค ์์ฑ์ ๊ฐ์ ์ธ ๋ ํธ๋ฉ์ ๋ฐ์ํ๋ค.
set ํจ์์์ ๋ณดํต 3๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
- target : new Proxy ์ ์ธ ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ฃผ์๋ target ๊ฐ์ฒด
- prop : ์์ฑํ ์์ฑ์ ์ด๋ฆ
- value: ์์ฑํ ์์ฑ์ ๊ฐ
์ ์ฝ๋์์ proxy ๊ฐ์ฒด์ 'test'๋ผ๋ ์์ฑ์ ์ ๊ทผํด์ ํธ๋ค๋ฌ์ set ํจ์๊ฐ ๋ฐ๋ํ๊ณ , ๊ฐ๊ฐ ํ์ผ๊ณผ ์ ๊ทผํ ์์ฑ ์ด๋ฆ, ์์ฑ ๊ฐ์ ์ถ๋ ฅํ๋ค.
'ํ๋ก ํธ์๋ > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Function vs Const (1) | 2023.12.04 |
---|