Skip to content

Commit 177477f

Browse files
[Object.keys, values, entries] 가독성 개선
1 parent 6d2e9b5 commit 177477f

File tree

1 file changed

+17
-17
lines changed
  • 1-js/05-data-types/09-keys-values-entries

1 file changed

+17
-17
lines changed

1-js/05-data-types/09-keys-values-entries/article.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
11

22
# Object.keys, values, entries
33

4-
개별 자료 구조에서 한발 뒤로 물러나 순회에 관해 이야기 나누어봅시다.
4+
개별 자료 구조에서 한발 뒤로 물러나 순회(iteration)에 관해 이야기 나누어봅시다.
55

6-
이전 챕터에서 `map.keys()`, `map.values()`, `map.entries()`와 같은 메서드들에 대해 알아보았습니다.
6+
이전 챕터에서 우리는 순회에 필요한 메서드 `map.keys()`, `map.values()`, `map.entries()` 대해 알아보았습니다.
77

8-
이 메서드들은 포괄적인 용도로 만들어졌기 때문에 이 메서드들이 적용될 자료구조는 일련의 합의를 준수해야 합니다. 자료구조를 직접 만들어서 사용하려면 기존에 구현된 메서드를 쓰지 못하고 직접 커스텀 메서드를 구현해야 합니다.
8+
이 메서드들은 포괄적인 용도로 만들어졌기 때문에 메서드를 적용할 자료구조는 일련의 합의를 준수해야 합니다. 커스텀 자료구조를 대상으로 순회를 해야 한다면 이 메서드들을 쓰지 못하고 직접 메서드를 구현해야 합니다.
99

10-
`keys()`, `values()`, `entries()`는 아래와 같은 자료구조에 적용할 수 있습니다.
10+
`keys()`, `values()`, `entries()`를 사용할 수 있는 자료구조는 다음과 같습니다.
1111

1212
- `Map`
1313
- `Set`
1414
- `Array`
1515

16-
일반 객체에도 유사한 메서드를 적용할 수 있는데, `Map`, `Set`, `Array`에 적용하는 메서드와는 문법이 약간 다릅니다.
16+
일반 객체에도 순회 관련 메서드가 있긴 한데, `keys()`, `values()`, `entries()`와는 문법에 차이가 있습니다.
1717

1818
## Object.keys, values, entries
1919

2020
일반 객체엔 다음과 같은 메서드를 사용할 수 있습니다.
2121

22-
- [Object.keys(obj)](mdn:js/Object/keys) -- 키가 담긴 배열을 반환합니다.
23-
- [Object.values(obj)](mdn:js/Object/values) -- 값이 담긴 배열을 반환합니다.
24-
- [Object.entries(obj)](mdn:js/Object/entries) -- `[key, value]` 쌍이 담긴 배열을 반환합니다.
22+
- [Object.keys(obj)](mdn:js/Object/keys) -- 객체의 키만 담은 배열을 반환합니다.
23+
- [Object.values(obj)](mdn:js/Object/values) -- 객체의 값만 담은 배열을 반환합니다.
24+
- [Object.entries(obj)](mdn:js/Object/entries) -- `[키, 값]` 쌍을 담은 배열을 반환합니다.
2525

26-
`Map`, `Set`, `Array`에 적용하는 메서드와 객체에 적용하는 메서드의 차이를 맵을 기준으로 비교하면 다음과 같습니다.
26+
`Map`, `Set`, `Array` 전용 메서드와 일반 객체용 메서드의 차이를 (맵을 기준으로) 비교하면 다음과 같습니다.
2727

2828
| || 객체 |
2929
|-------------|------------------|--------------|
30-
| 호출 문법 | `map.keys()` | `obj.keys()`가 아닌 `Object.keys(obj)` |
30+
| 호출 문법 | `map.keys()` | `Object.keys(obj)`(`obj.keys()` 아님) |
3131
| 반환 값 | iterable 객체 | '진짜' 배열 |
3232

3333
첫 번째 차이는 `obj.keys()`가 아닌 `Object.keys(obj)`를 호출한다는 점입니다.
3434

35-
이렇게 문법에 차이가 있는 이유는 유연성 때문입니다. 아시다시피 자바스크립트에선 복잡한 자료구조 전체가 객체에 기반합니다. 그러다 보니 객체 `data`에 자체적으로 메서드 `data.values()`구현해 사용하는 경우가 있을 수 있습니다. 이렇게 커스텀 메서드를 구현한 상태라도 `Object.values(data)`같이 다른 형태로 메서드를 호출할 수 있으면 커스텀 메서드와 내장 메서드 둘 다를 사용할 수 있습니다.
35+
이렇게 문법이 다른 이유는 유연성 때문입니다. 아시다시피 자바스크립트에선 복잡한 자료구조 전체가 객체에 기반합니다. 그러다 보니 객체 `data`에 자체적으로 `data.values()`라는 메서드를 구현해 사용하는 경우가 있을 수 있습니다. 이렇게 커스텀 메서드를 구현한 상태라도 `Object.values(data)`같은 형태로 메서드를 호출할 수 있으면 커스텀 메서드와 내장 메서드 둘 다를 사용할 수 있습니다.
3636

3737
두 번째 차이는 메서드 `Object.*`를 호출하면 iterable 객체가 아닌 객체의 한 종류인 배열을 반환한다는 점입니다. '진짜' 배열을 반환하는 이유는 하위 호환성 때문입니다.
3838

@@ -53,20 +53,20 @@ let user = {
5353

5454
```js run
5555
let user = {
56-
name: "John",
56+
name: "Violet",
5757
age: 30
5858
};
5959

6060
// 값을 순회합니다.
6161
for (let value of Object.values(user)) {
62-
alert(value); // John, 30
62+
alert(value); // Violet과 30이 연속적으로 출력됨
6363
}
6464
```
6565

6666
```warn header="Object.keys, values, entries는 심볼형 프로퍼티를 무시합니다."
6767
`for..in` 반복문처럼, Object.keys, Object.values, Object.entries는 키가 심볼형인 프로퍼티를 무시합니다.
6868
69-
대개는 심볼형 키를 연산 대상에 포함하지 않는 게 좋지만, 심볼형 키가 필요한 경우엔 심볼형 키만 배열 형태로 반환해주는 메서드, [Object.getOwnPropertySymbols](mdn:js/Object/getOwnPropertySymbols)를 사용하면 됩니다. `getOwnPropertySymbols` 이외에도 *모든* 키를 배열 형태로 반환하는 메서드, [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys)를 사용할 수 있습니다.
69+
대개는 심볼형 키를 연산 대상에 포함하지 않는 게 좋지만, 심볼형 키가 필요한 경우엔 심볼형 키만 배열 형태로 반환해주는 메서드인 [Object.getOwnPropertySymbols](mdn:js/Object/getOwnPropertySymbols)를 사용하면 됩니다. `getOwnPropertySymbols` 이외에도 키 *전체*를 배열 형태로 반환하는 메서드인 [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys)를 사용해도 괜찮습니다.
7070
```
7171

7272

@@ -76,11 +76,11 @@ for (let value of Object.values(user)) {
7676

7777
하지만 `Object.entries``Object.fromEntries`를 순차적으로 적용하면 객체에도 배열 전용 메서드 사용할 수 있습니다. 적용 방법은 다음과 같습니다.
7878

79-
1. `Object.entries(obj)`를 사용해 객체의 키-값 쌍을 요소로 갖는 배열을 얻습니다.
79+
1. `Object.entries(obj)`를 사용해 객체의 키-값 쌍이 요소인 배열을 얻습니다.
8080
2. 1.에서 만든 배열에 `map` 등의 배열 전용 메서드를 적용합니다.
8181
3. 2.에서 반환된 배열에 `Object.fromEntries(array)`를 적용해 배열을 다시 객체로 되돌립니다.
8282

83-
방법을 사용해 가격 정보가 저장된 객체 prices의 프로퍼티 값을 두 배로 늘려보도록 합시다.
83+
방법을 사용해 가격 정보가 저장된 객체 prices의 프로퍼티 값을 두 배로 늘려보도록 합시다.
8484

8585
```js run
8686
let prices = {
@@ -99,4 +99,4 @@ let doublePrices = Object.fromEntries(
9999
alert(doublePrices.meat); // 8
100100
```
101101

102-
지금 당장은 어렵게 느껴지겠지만 한두 번 위와 같은 방법을 적용해 보면 객체에 배열 전용 메서드를 손쉽게 적용할 수 있을 겁니다.
102+
지금 당장은 어렵게 느껴지겠지만 한두 번 방법을 적용해 보면 객체에 배열 전용 메서드를 적용하는게 쉬워질 겁니다.

0 commit comments

Comments
 (0)