Proxy in JS
π¦ μ‘λμ¬λ
νλμ ν€μλλ₯Ό μ‘κ³ μ’ νΈνκ² μ 리νκ³ μΆμ΄ λ§λ μ‘λμ¬λ
μ‘λμ¬λλ μ‘°μ νκΈ° νμ
μμ 볡
μ΄ νΈμ°¬νμ‘λμ°μ΄(ιεζ£η°)
μμ μ λλ λ§μ΄λ€.
μ‘λμ°μ΄λμ‘κΈ°(ιθ¨)
μ ννλ₯Ό λΉλ €μ¨ μ± μΌλ‘ ꡬ체μ μΈ μ²΄κ³κ° μ‘νμμ§ μμ νμμ΄λ€.
νλͺ©μ΄ λ€μ λμ‘νκ³ λ΄μ©μ ꡬλΆμ΄ νΌλλμ΄μλ€κ³ νλ€. π€£
ποΈ μμ±νκ² λ μ΄μ
λ°λλΌ JSλ‘ κ°λ¨ν κΈ°λ₯μ ꡬννλ€κ° Proxy κ°μ²΄λ₯Ό μκ² λμλ€. μ΄μ μλ μ΄μ§ 곡λΆλ νμμ§λ§, κ°λ μ κΈ°μ΅μ΄ λλ κ°μ²΄ μ체μ μ¬μ©λ°©λ²μ κΈ°μ΅μ΄ λμ§ μμμ μ 리νκ² λμλ€.
ποΈ Proxy
Proxyλ μ£Όλ‘ λ리νλ€.
, κ°λ‘μ±λ€.
, νμΉλ€.
λ±μ μλ―Έλ₯Ό κ°λλ€. νν μ°λ¦¬κ° μλ½μ§
λΌκ³ λΆλ₯΄λ μ€νμ΄ λλμ λ¨μ΄λ Proxyμμ μ λλ κ²μ΄λ€.
IT μ©μ΄λ‘ Proxy(νλ‘μ)κ° μ¬μ©λλ λ€μν μν©μ΄ μλ€.
μ°μ Proxy μλ²λΌκ³ νλ©΄ λ리 μλ²
λΌκ³ μκ°νλ©΄ λλ€. ν΄λΌμ΄μΈνΈκ° μλ²μ μμ²μ 보λ΄λ©΄ Proxy μλ²κ° μμ²μ λ°μμ μλ²μ μμ²μ 보λ΄κ³ , μλ²κ° μλ΅μ 보λ΄λ©΄ Proxy μλ²κ° μλ΅μ λ°μμ ν΄λΌμ΄μΈνΈμκ² μλ΅μ 보λ΄λ λ°©μμ΄λ€. μ΄λ κ² Proxy μλ²λ₯Ό λλ μ΄μ λ μ¬λ¬κ°μ§κ° μμ§λ§, μ£Όλ‘ λ³΄μκ³Ό μ±λ₯μ μν΄ μ¬μ©νλ€.
κ·Έλ λ€λ©΄ JSμμμ Proxyλ μ΄λ€ μν μ ν μ§ μμ보μ!
ποΈ Proxy in JS
JSμμμ Proxyλ κ°μ²΄μ κΈ°λ³Έμ μΈ λμ(JSμ κ°μ²΄μμ κ°μ μ½μ΄μ€λ κ²μ get, κ°μ λ³κ²½νλ κ²μ setμ΄λΌκ³ νλ€.)μ κ°λ‘μ±μ λ€λ₯Έ λμμ ν μ μκ² ν΄μ€λ€. μ΄λ₯Ό ν΅ν΄ κ°μ²΄μ λμμ μμ νκ±°λ, κ°μ²΄μ μ κ·Όνλ λ°©μμ λ³κ²½ν μ μλ€.
μλμ κ°μ μν©μ κ°μ ν΄λ³΄μ.
const target = { name: 'jayden' };
target.name; // jayden
μλ€μνΌ target.name
μΌλ‘ name νλ‘νΌν°μ κ°μ get
ν μ μλ€. κ·Έλ°λ° μ¬κΈ°μ λ§μ½μ μ΄ κ°μ μ½μ΄μ¬ λ, μ΄λ€ 무μΈκ°λ₯Ό μΆκ°μ μΌλ‘ μμ
ν΄μ£Όκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ..? Proxyλ₯Ό μμ§ λͺ»νλ€λ©΄ μλμ κ°μ΄ μ½λλ₯Ό μμ±ν μ μμ κ²μ΄λ€.
const target = { name: 'jayden' };
const doSomething = (target, callback) => {
const result = target.name;
callback(result);
return result;
};
doSomething(target, (result) => {
console.log(result); // jayden
});
doSomething
μ targetκ³Ό μ΄λ€ μ½λ°±μ μ λ¬νμ¬ nameμ ν΄λνλ κ°μ λ°νν¨κ³Ό λμμ ν΄λΉ κ°μ logλ‘ μ°λ νμλ₯Ό ν μ μλ€.
μ΄μ Proxyλ₯Ό μ¬μ©ν΄λ³΄μ.
const target = { name: 'jayden' };
const handleTarget = {
get(target, prop, receiver) {
console.log({ target, prop, receiver });
return target[prop]; // μ΄λ κ² λ°ννλ κ² κΈ°λ³Έμ μΈ getter λμ
},
set(target, prop, newValue) {
console.log({ target, prop, newValue });
target[prop] = newValue; // μ΄κ² setterμ κΈ°λ³Έ λμ
},
};
const proxyObj = new Proxy(target, handleTarget);
Proxy κ°μ²΄μ targetκ³Ό handlerλ₯Ό μ λ¬νλ©΄, handlerμ μ μλ λμμ μννκ² λλ€. μμ μ½λμμλ getκ³Ό setμ μ μνκΈ° λλ¬Έμ targetμ κ°μ μ½μ΄μ€κ±°λ λ³κ²½ν λ, handlerμ μ μλ λμμ μννκ² λλ κ²μ΄λ€.
μ²μ 보면 볡μ‘ν΄λ³΄μ΄μ§λ§ μ½λλ₯Ό ν λ² μμ±ν΄λ³΄λ©΄ μκ°λ³΄λ€ κ°λ¨ν κ²μ μ μ μλ€.
ProxyλΌλ κ°μ²΄κ° μμμ κΈ°μ΅νκ³ μ½λλ₯Ό μμ±νλ€κ° νμν μν©μ΄ μκΈ°λ©΄ Proxyλ₯Ό μ¬μ©ν΄λ³΄μ!