프록시(proxy)는 대리(행위) 라는 뜻이다. Proxy 객체를 사용하면 한 객체에 대한 기본 작업을 가로채고 재정의하는 프록시를 만들 수 있다. 2개의 파라미터를 사용하여 Proxy를 생성한다.
첫번째로, 프록시할 원본 객체를 만든다.
const target = {
name: 'Alice',
age: 30,
};
그 다음, 프록시 객체를 만든다.
// 프록시 객체 생성
const handler = {
// 프로퍼티 읽기를 가로채서 특정 동작을 수행
get: function (target, property) {
console.log(`접근한 프로퍼티: ${property}`);
return target[property];
},
// 프로퍼티 쓰기를 가로채서 특정 동작을 수행
set: function (target, property, value) {
console.log(`설정한 프로퍼티: ${property}, 값: ${value}`);
target[property] = value;
},
};
const proxy = new Proxy(target, handler);
프록시 객체를 생성했기 때문에 원본 객체 대신 프록시 객체에 접근한다.
console.log(proxy.name); // 접근한 프로퍼티: name, 출력: Alice
proxy.age = 35; // 설정한 프로퍼티: age, 값: 35
console.log(proxy.age); // 접근한 프로퍼티: age, 출력: 35
target
객체는 일반적으로 볼수 있는 객체다. handler
객체는 프록시의 동작을 정의하는 핸들러 객체다. get 메서드는 프로퍼티를 읽을 때 호출되며, set 메서드는 프로퍼티를 변경할 때 호출된다.
proxy 객체를 통해 target 객체에 접근하면, handler 객체의 get 및 set 메서드가 호출되고, 이 메서드들은 특정 동작을 수행하고, 원본 객체에 해당 동작을 반영한다.
get 메서드가 프로퍼티에 접근할 때마다 해당 프로퍼티를 출력하고, set 메서드가 프로퍼티를 변경할 때마다 변경한 프로퍼티와 값을 출력한다.
따라서 proxy.name은 get 메서드가 호출되어 name 프로퍼티를 출력하고, proxy.age = 35는 set 메서드가 호출되어 age 프로퍼티를 변경하고, 변경한 프로퍼티와 값을 출력한다.
현대의 웹 페이지는 대용량의 이미지, 동영상, 자바스크립트 파일 등 다양한 리소스를 포함하고 있다. 이로 인해 페이지 로딩 속도가 느려지고 사용자 경험이 저하될 수 있다. 이러한 문제를 해결하기 위해 Lazy Loading
이라는 기법이 등장했다. Lazy Loading은 페이지가 초기 로드될 때 필요한 리소스만 로드하고, 나머지 리소스는 필요한 시점에 동적으로 로드하는 방식이다.
사용자가 해당 리소스를 요청하기 전까지는 로딩하지 않으며, 필요한 리소스만 로드함으로써 초기 페이지 로딩 속도를 향상시킬 수 있다. 일반적으로 이미지, 동영상, 스크롤 이벤트에 반응하는 콘텐츠 등에 적용할수 있다.