[Javascript] Proxy
Proxy๋ ์ผ์ข
์ ๊ฐ๋ก์ฑ๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ JS ํ์ค ๊ฐ์ฒด๋ค.
์ฌ์ด๋์ดํํธ ๋ฒ๋ฒ
์ ์ ๋ํ๋ Javascript๋ค์ด ๊ธฐ๋ฅ์ด๋ค.
๋๋ถ๋ถ์ ํ๊ฒฝ์์ ์ ๊ตฌํ๋์ด์๋ค.
๋จผ์ ์๋์ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ๋ค.
์ฌ์ค ์ด๋ค ํํ์ ๊ฐ์ฒด๋ ์๊ด์๋ค. ํจ์๋ ๋๊ณ ์ด๋ฐ์ ๋ฐ ๊ฐ๋ค ๋ค ๋๋ค.
์ด๊ฑธ Proxy๋ผ๋ ๊ฐ์ฒด๋ก ๊ฐ์ธ์ ๋ง๋ค๋ฉด ๊ทธ๋๋ถํฐ ํ๋ก์์ ๊ฐ๋ก์ฑ๊ธฐ ๋ชจ๋๊ฐ ํ์ฑํ๋๋ค.
Proxy ์์ฑ์์ ์ฒซ๋ฒ์งธ ์ธ์๋ ์๋ณธ ๊ฐ์ฒด, ๋๋ฒ์งธ ์ธ์๋ ๊ฐ๋ก์ฑ๊ธฐ ๋์์ ์ ์ํ๋ ๊ฐ์ฒด๋ค.
์ฌ๊ธฐ์ get์ ์๋ณธ ๊ฐ์ฒด์์ ํน์ ํ๋๋ฅผ ๊ฐ์ ธ์ค๋ ค ํ ๋ ์ด๋ค ๋์์ ํ ์ง๋ฅผ ์ ์ํ๋ค. ์ด ๋์ ์ ์๋ฅผ trap์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ๊ธฐ์๋ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ํ๋๊ฐ ์์ ๋ ๋ฌธ์์ด๋ง ๋ฐํํ๋ ์ ๋์ ์ ์ด๋ฅผ ์ถ๊ฐํ๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ๊ฐ๋ก์ฑ์ ๋ฌธ์์ด์ด ๋ฐํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
set์ ๋ฐ๋๋ก ํ๋์ ๊ฐ์ ํ ๋นํ ๋ ํธ์ถ๋๋ ํธ๋ฆฌ๊ฑฐ๋ค.

์ด๋ฐ์์ผ๋ก ํ๋ฉด ์๋ํ๋๋ก ๊ฐ์ด ๋ค์งํ์ ๋ค์ด๊ฐ๋ค.
์ง์๋๋ trap์ get/set ์ธ์๋ deleteProperty, ownKeys, has, getOwnPropertyDescriptor ์ ๋๊ฐ ์๋ค.
deleteProperty๋ del๋ก ํ๋ ์ญ์ ๋ฅผ ์๋ํ ๋ ํธ๋ฆฌ๊ฑฐ๋๊ณ , ownKeys๋ for(A in N) ๊ฐ์ ํ๋กํผํฐ ์ํ๋ฅผ ๊ฐ๋ก์ฑ๋ค.
has๋ ํ๋ ํ์ธ์ฉ A in B ์ฐ์ฐ์ ๋์์ ๊ฐ๋ก์ฑ๋ค.
์ฌ์ค ์ฌ์ฉ์ ๊ทธ๋ฆฌ ๊ถํ ๋งํ ๊ธฐ๋ฅ์ ์๋์ง๋ง, ์์ฃผ ๊ฐ๋ ์ ์ฉํ ๋๊ฐ ์๋ค.
์ฐธ์กฐ
https://ko.javascript.info/proxy
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Proxy