연권
달콘박스
연권
전체 방문자
오늘
어제
  • 전체 (308)
    • Web (22)
      • JavaScript (8)
      • TypeScript (2)
      • Node.js (8)
      • HTML (0)
      • CSS (0)
      • Network (1)
      • Browser (0)
      • Patterns (3)
    • Framwork (4)
      • Vue.js (3)
      • Electron (1)
    • Infra&DevOps (1)
    • Algorithm (246)
    • Database (16)
    • Review (15)
    • Test (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • MySQL
  • 스택
  • 알고리즘
  • DP
  • 백준
  • 진수
  • 코딩테스트 연습
  • typescript
  • 진법
  • javascript
  • 문자열
  • 프로그래머스
  • java
  • sql
  • BFS
  • 동적계획법
  • 백트레킹
  • 백준ㅇ
  • 재귀

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
연권

달콘박스

Proxy Pattern (JavaScript)
Web/Patterns

Proxy Pattern (JavaScript)

2022. 6. 7. 06:09
반응형
이 글은 Patterns.dev를 참고하여 작성한 시리즈 입니다.

 

Proxy Pattern

대상 객체에 대한 상호작용 가로채기 및 제어

 

Proxy 객체를 사용하면 특정 객체와 상호작용을 보다 효과적으로 제어할 수 있습니다. 프록시 객체는 값을 얻거나 설정할 때 등 상호작용할 때의 동작을 설정할 수 있습니다.

 

일반적으로 프록시는 다른 사람의 대리인을 의미합니다. 상대방과 직접 대화하는 대신, 당신이 대화하려고 했던 사람을 대신할 대리인과 대화합니다. JavaScript에서도 마찬가지 입니다. 원본 객체와 대화하는 대신 Proxy 객체와 대화합니다.

-> 원본 객체를 Immutable하게 사용할 수 있습니다.

 

먼저 yeon 객체를 생성합니다. 저를 나타내는 객체입니다.

 

이 객체와 직접 상호작용 하는 대신 프록시 객체와 상호작용하는 것이 좋습니다.

JavaScript에서는 Proxy를 통해 프록시 객체를 쉽게 생성할 수 있습니다.

 

 

Proxy의 두 번째 인자는 핸들러를 나타내는 객체입니다. 핸들러 객체에서 상호작용 유형에 따라 특정 동작을 정의할 수 있습니다. 메서드는 여러 가지가 있지만 가장 일반적인 두 가지 메서드는 다음과 같습니다.

 

  • get: 속성에 엑세스하려고 할 때 호출됩니다.
  • set: 속성을 수정하려고 할 때 호출됩니다.

 

Proxy 핸들러 추가

yeonProxy에 핸들러를 추가해봅시다. get과 set메서드를 호출할 때 console을 찍을 수 있도록 합니다.

속성을 수정하거나 탐색하려고 하면 어떤 일이 일어나는지 살펴보겠습니다.

속성을 수정하거나 탐색할 때 console.log가 찍히게 되었습니다.


 

활용하기

Proxy는 validation(검증)을 추가할 때 유용합니다. 사용자는 yeon의 age 값을 string 타입으로 변경해선 안됩니다. 또한 존재하지 않는 속성에 엑세스하려고 할 경우 사용자에게 알려야 합니다.

if문을 통해 객체가 의도하지 않은 형태의 값을 넣지 못하도록 했습니다. 즉 순수하게 데이터를 유지하는 데 도움이 됩니다.

 

Reflect

JavaScript는 Reflect라고 불리는 내장 객체를 제공합니다. Reflect를 사용하면 proxy를 사용할 때 대상 객체를 쉽게 다룰 수 있습니다.

이전에는 []을 통해서 직접 값을 가져오거나 대상 객체의 속성을 수정하고 엑세스 하려고 했습니다. 그 대신 Proxy의 핸들러를 모두 동일하게 갖고 있는 Reflect를 통해 Reflect.get(), Reflect.set()을 사용하는 것으로 객체의 속성을 엑세스하거나 변경할 수 있습니다.

Reflect를 사용함으로써 더 깔끔하게 에러핸들링과 값의 반영을 구현할 수 있게 되었습니다.

 

 

 

Reference

https://ui.toast.com/weekly-pick/ko_20210413

https://www.patterns.dev/posts/singleton-pattern/

반응형
저작자표시 동일조건 (새창열림)

'Web > Patterns' 카테고리의 다른 글

Observer Pattern  (1) 2022.06.21
Singleton Pattern (JavaScript)  (0) 2022.06.07
    'Web/Patterns' 카테고리의 다른 글
    • Observer Pattern
    • Singleton Pattern (JavaScript)
    연권
    연권

    티스토리툴바