You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/08-symbol/article.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -83,7 +83,7 @@ alert(id.description); // id
83
83
84
84
## '숨김' 프로퍼티
85
85
86
-
심볼을 이용하면 "숨김(hidden)" 프로퍼티를 만들 수 있습니다. 숨김 프로퍼티는 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티입니다.
86
+
심볼을 이용하면 '숨김(hidden)' 프로퍼티를 만들 수 있습니다. 숨김 프로퍼티는 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티입니다.
87
87
88
88
서드파티 코드에서 가지고 온 `user`라는 객체가 여러 개 있고, `user`를 이용해 어떤 작업을 해야 하는 상황이라고 가정해 봅시다. `user`에 식별자를 붙여주도록 합시다.
89
89
@@ -105,7 +105,7 @@ alert( user[id] ); // 심볼을 키로 사용해 데이터에 접근할 수 있
105
105
106
106
`user` 객체는 다른 코드베이스에 속해 있으므로, 함부로 새로운 필드(프로퍼티)를 추가하는 것은 안전하지 않습니다. 해당 코드베이스에 미리 정의된 동작에 영향을 줄 수 있기 때문입니다. 하지만 심볼은 우연히 접근하는 것이 불가능합니다. 서드파티 코드는 새롭게 정의된 심볼을 알지 못하므로, `user` 객체에 심볼을 추가하는 것은 안전합니다.
107
107
108
-
상황 하나를 더 가정해보겠습니다. 제3의 스크립트(자바스크립트 라이브러리 등)에서 `user`를 식별해야 하는 상황이 벌어졌다고 해보죠. `user`의 원천인 서드파티 코드, 현재 작성 중인 스크립트, 제3의 스크립트가 각자 서로의 코드도 모른 채 `user`를 식별해야 하는 상황이 벌어졌습니다.
108
+
109
109
110
110
111
111
@@ -173,7 +173,7 @@ for (let key in user) alert(key); // name과 age만 출력되고, 심볼은 출
173
173
*/!*
174
174
175
175
// 심볼로 직접 접근하면 잘 작동합니다.
176
-
alert( "직접 접근한 값: "+ user[id] );
176
+
alert( "직접 접근한 값: "+ user[id] );// 직접 접근한 값: 123
177
177
```
178
178
179
179
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)에서도 키가 심볼인 프로퍼티는 무시됩니다. 이는 "심볼형 프로퍼티 숨기기(hiding symbolic properties)" 원칙의 일환입니다. 만약 외부 스크립트나 라이브러리가 우리가 만든 객체를 반복문으로 순회하더라도, 심볼형 프로퍼티에 의도치 않게 접근하는 일은 발생하지 않습니다.
0 commit comments