Skip to content

Commit a3704a8

Browse files
[Proxy와 Reflect] 보완
- #952 - 문장 다듬기
1 parent cc38ff5 commit a3704a8

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

1-js/99-js-misc/01-proxy/article.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ let proxy = new Proxy(target, handler)
1515
- `target` -- 감싸게 될 객체로, 함수를 포함한 모든 객체가 가능합니다.
1616
- `handler` -- 동작을 가로채는 메서드인 '트랩(trap)'이 담긴 객체로, 여기서 프락시를 설정합니다(예시: `get` 트랩은 `target`의 프로퍼티를 읽을 때, `set` 트랩은 `target`의 프로퍼티를 쓸 때 활성화됨).
1717

18-
`proxy`에 작업이 가해지고, `handler`에 상응하는 트랩이 있으면 트랩이 실행되어 프락시가 이 작업을 처리할 기회를 얻게 됩니다. 트랩이 없으면 작업은 `target`에 직접 수행됩니다.
18+
`proxy`에 작업이 가해지고, `handler`작업과 상응하는 트랩이 있으면 트랩이 실행되어 프락시가 이 작업을 처리할 기회를 얻게 됩니다. 트랩이 없으면 `target` 작업이 직접 수행됩니다.
1919

2020
먼저, 트랩이 없는 프락시를 사용한 예시를 살펴봅시다.
2121

@@ -47,7 +47,7 @@ for(let key in proxy) alert(key); // test, 반복도 잘 동작합니다. -- (3)
4747

4848
그 전에 먼저, 트랩을 사용해 가로챌 수 있는 작업은 무엇이 있는지 알아봅시다.
4949

50-
객체에 어떤 작업을 할 땐, 자바스크립트 명세서에 정의된 '내부 메서드(internal method)'가 깊숙한 곳에서 관여합니다. 프로퍼티를 읽을 땐 `[[Get]]`이라는 내부 메서드가, 프로퍼티에 쓸 땐 `[[Set]]`이라는 내부 메서드가 관여하게 되죠. 이런 내부 메서드들은 명세서에만 정의된 메서드이기 때문에 개발자가 코드를 사용해 호출할 순 없습니다.
50+
객체에 어떤 작업을 할 땐 자바스크립트 명세서에 정의된 '내부 메서드(internal method)'가 깊숙한 곳에서 관여합니다. 프로퍼티를 읽을 땐 `[[Get]]`이라는 내부 메서드가, 프로퍼티에 쓸 땐 `[[Set]]`이라는 내부 메서드가 관여하게 되죠. 이런 내부 메서드들은 명세서에만 정의된 메서드이기 때문에 개발자가 코드를 사용해 호출할 순 없습니다.
5151

5252
프락시의 트랩은 내부 메서드의 호출을 가로챕니다. 프락시가 가로채는 내부 메서드 리스트는 [명세서](https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots)에서 확인할 수 있는데, 아래 표에도 이를 정리해 놓았습니다.
5353

@@ -72,22 +72,22 @@ for(let key in proxy) alert(key); // test, 반복도 잘 동작합니다. -- (3)
7272
```warn header="규칙"
7373
내부 메서드나 트랩을 쓸 땐 자바스크립트에서 정한 몇 가지 규칙(invariant)을 반드시 따라야 합니다.
7474
75-
대부분의 조건은 반환 값과 관련되어있습니다.
75+
대부분의 규칙은 반환 값과 관련되어있습니다.
7676
- 값을 쓰는 게 성공적으로 처리되었으면 `[[Set]]`은 반드시 `true`를 반환해야 합니다. 그렇지 않은 경우는 `false`를 반환해야 합니다.
7777
- 값을 지우는 게 성공적으로 처리되었으면 `[[Delete]]`는 반드시 `true`를 반환해야 합니다. 그렇지 않은 경우는 `false`를 반환해야 합니다.
7878
- 기타 등등(아래 예시를 통해 더 살펴보겠습니다.)
7979
8080
이 외에 다른 조건도 있습니다.
8181
- 프락시 객체를 대상으로 `[[GetPrototypeOf]]`가 적용되면 프락시 객체의 타깃 객체에 `[[GetPrototypeOf]]`를 적용한 것과 동일한 값이 반환되어야 합니다. 프락시의 프로토타입을 읽는 것은 타깃 객체의 프로토타입을 읽는 것과 동일해야 하죠.
8282
83-
트랩이 연산을 가로챌 땐 위에서 언급한 규칙을 따라야 하죠.
83+
트랩이 연산을 가로챌 땐 위에서 언급한 규칙을 따라야 합니다.
8484
85-
규칙은 자바스크립트가 일관된 동작을 하고 잘못된 동작이 있으면 이를 고쳐주는 역할을 합니다. 규칙 목록은 [명세서](https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots)에서 확인할 수 있습니다. 이상한 짓을 하지 않는 이상 이 규칙을 어길 일은 거의 없습니다.
85+
이와 같은 규칙은 자바스크립트가 일관된 동작을 하고 잘못된 동작이 있으면 이를 고쳐주는 역할을 합니다. 규칙 목록은 [명세서](https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots)에서 확인할 수 있습니다. 아주 이상한 짓을 하지 않는한 이 규칙을 어길 일은 거의 없을겁니다.
8686
```
8787

8888
자, 이제 본격적으로 실용적인 예시들을 살펴보면서 프락시 객체가 어떻게 동작하는지 알아봅시다.
8989

90-
## 'get' 트랩으로 프로퍼티 기본값 설정하기
90+
## get 트랩으로 프로퍼티 기본값 설정하기
9191

9292
가장 흔히 볼 수 있는 트랩은 프로퍼티를 읽거나 쓸 때 사용되는 트랩입니다.
9393

@@ -181,7 +181,7 @@ dictionary = new Proxy(dictionary, ...);
181181
타깃 객체의 위치와 상관없이 프락시 객체는 타깃 객체를 덮어써야만 합니다. 객체를 프락시로 감싼 이후엔 절대로 타깃 객체를 참조하는 코드가 없어야 합니다. 그렇지 않으면 엉망이 될 확률이 아주 높아집니다.
182182
````
183183

184-
## 'set' 트랩으로 프로퍼티 값 검증하기
184+
## set 트랩으로 프로퍼티 값 검증하기
185185

186186
숫자만 저장할 수 있는 배열을 만들고 싶다고 가정해봅시다. 숫자형이 아닌 값을 추가하려고 하면 에러가 발생하도록 해야겠죠.
187187

@@ -239,7 +239,7 @@ alert("윗줄에서 에러가 발생했기 때문에 이 줄은 절대 실행되
239239
`true`를 반환하지 않았거나 falsy한 값을 반환하게 되면 `TypeError`가 발생합니다.
240240
```
241241
242-
## 'ownKeys'와 'getOwnPropertyDescriptor'로 반복 작업하기
242+
## ownKeys와 getOwnPropertyDescriptor로 반복 작업하기
243243
244244
`Object.keys`, `for..in` 반복문을 비롯한 프로퍼티 순환 관련 메서드 대다수는 내부 메서드 `[[OwnPropertyKeys]]`(트랩 메서드는 `ownKeys`임)를 사용해 프로퍼티 목록을 얻습니다.
245245
@@ -323,7 +323,7 @@ alert( Object.keys(user) ); // a, b, c
323323

324324
객체에 프로퍼티가 없을 때 `[[GetOwnProperty]]`만 가로채면 된다는 점을 다시 한번 상기하시기 바랍니다.
325325

326-
## 'deleteProperty'와 여러 트랩을 사용해 프로퍼티 보호하기
326+
## deleteProperty와 여러 트랩을 사용해 프로퍼티 보호하기
327327

328328
`_`(밑줄)이 앞에 붙은 프로퍼티나 메서드는 내부용으로만 쓰도록 하는 컨벤션은 널리 사용되고 있는 컨벤션 중 하나입니다. `_`이 앞에 붙으면 객체 바깥에선 이 프로퍼티에 접근해선 안 됩니다.
329329

@@ -453,7 +453,7 @@ user = {
453453
그런데 private 프로퍼티는 상속이 불가능하다는 단점이 있습니다.
454454
```
455455

456-
## 'has' 트랩으로 '범위` 내 여부 확인하기
456+
## has 트랩으로 '범위' 내 여부 확인하기
457457

458458
좀 더 많은 예시를 살펴봅시다.
459459

@@ -499,7 +499,7 @@ alert(50 in range); // false
499499

500500
정말 멋진 편의 문법이지 않나요? 구현도 아주 간단합니다.
501501

502-
## 'apply' 트랩으로 함수 감싸기 [#proxy-apply]
502+
## apply 트랩으로 함수 감싸기 [#proxy-apply]
503503

504504
함수 역시 프락시로 감쌀 수 있습니다.
505505

0 commit comments

Comments
 (0)