ES6 proxy
Proxy๋ก interception ๊ธฐ๋ฅ ๊ตฌํ
์ด๋ค object๋ฅผ ๊ฐ๋ก์ฑ์ ์ถ๊ฐ๋ก ๋ค๋ฅธ ์์ ์ ๋ํ๋ ๋ฐฉ์
Proxy
๋ ํน์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ ํ๋กํผํฐ ์ฝ๊ธฐ, ์ฐ๊ธฐ์ ๊ฐ์ ๊ฐ์ฒด์ ๊ฐํด์ง๋ ์์ ์ ์ค๊ฐ์์ ๊ฐ๋ก์ฑ๋ ๊ฐ์ฒด๋ก, ๊ฐ๋ก์ฑ์ง ์์ ์Proxy
์์ฒด์์ ์ฒ๋ฆฌ๋๊ธฐ๋ ํ๊ณ , ์๋ ๊ฐ์ฒด๊ฐ ์ฒ๋ฆฌํ๋๋ก ๊ทธ๋๋ก ์ ๋ฌ๋๊ธฐ๋ ํจ
let proxy = new Proxy(target, handler)
target โ ๊ฐ์ธ๊ฒ ๋ ๊ฐ์ฒด๋ก, ํจ์๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
handler โ ๋์์ ๊ฐ๋ก์ฑ๋ ๋ฉ์๋์ธ 'ํธ๋ฉ(trap)'์ด ๋ด๊ธด ๊ฐ์ฒด๋ก, ์ฌ๊ธฐ์ ํ๋ฝ์๋ฅผ ์ค์ ํฉ๋๋ค(์์: get ํธ๋ฉ์ target์ ํ๋กํผํฐ๋ฅผ ์ฝ์ ๋, set ํธ๋ฉ์ target์ ํ๋กํผํฐ๋ฅผ ์ธ ๋ ํ์ฑํ๋จ).
proxy์ ์์
์ด ๊ฐํด์ง๊ณ , handler์ ์์
๊ณผ ์์ํ๋ ํธ๋ฉ์ด ์์ผ๋ฉด ํธ๋ฉ์ด ์คํ๋์ด ํ๋ฝ์๊ฐ ์ด ์์
์ ์ฒ๋ฆฌํ ๊ธฐํ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ํธ๋ฉ์ด ์์ผ๋ฉด target์ ์์
์ด ์ง์ ์ํ๋ฉ๋๋ค.
const myObj = { name: 'mcm', changedValue: 0}
const proxy = new Proxy(myObj, {
get: function(target, property, receiver) { // getํธ๋ฉ
console.log('get value')
return target[property]
},
set: function(target, property, value) { // setํธ๋ฉ
console.log('set value')
++target['changedValue'];
target[property] = value
}
})
proxy.name = 'hihi' // set value
console.log(proxy.name) // get value , hihi
Last updated