aboutsummaryrefslogtreecommitdiff
path: root/files/ko/web/javascript/reference/global_objects/symbol/for/index.md
blob: 5926b44368184b9138ff885ba8d9579cabc894fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---
title: Symbol.for()
slug: Web/JavaScript/Reference/Global_Objects/Symbol/for
tags:
  - ECMAScript 2015
  - JavaScript
  - Method
  - Symbol
browser-compat: javascript.builtins.Symbol.for
---
{{JSRef}}

**`Symbol.for(key)`** 메서드는 주어진 키를 사용해 런타임 범위의 심볼 레지스트리에서 존재하는 심볼을 찾고, 존재할 경우 이를 반환합니다. 존재하지 않는 경우에는 해당 키를 사용해 전역 심볼 레지스트리에 새로운 심볼을 생성합니다.

{{EmbedInteractiveExample("pages/js/symbol-for.html")}}

## 구문

```js
Symbol.for(key);
```

### 파라미터

- `key`
  - : 문자열, 필수. 심볼에 대한 키(심볼을 설명하기 위해서도 사용됨).

### 반환 값

주어진 키를 갖는 존재하는 심볼. 존재하지 않을 경우 새로운 심볼이 생성되고 반환됨.

## 설명

`Symbol()`과 대조적으로, `Symbol.for()` 함수는 전역 심볼 레지스트리 목록에서 사용 가능한 심볼을 생성합니다. `Symbol.for()`는 호출할 때마다 새로운 심볼을 생성하지는 않으며 레지스트리에서 주어진 `key`를 갖는 심볼이 이미 존재하는지를 먼저 확인합니다. 존재하는 경우 해당하는 심볼이 반환됩니다. 주어진 키를 갖는 심볼이 존재하지 않는 경우, `Symbol.for()`는 새로운 전역 심볼을 생성합니다.

### 전역 심볼 레지스트리

전역 심볼 레지스트리는 다음 레코드 구조를 갖는 목록이며 비어있는 상태로 초기화됩니다.

| 필드명 | 값                                   |
| ---------- | --------------------------------------- |
| [[key]]    | 심볼을 구분하는데 사용되는 문자열 키. |
| [[symbol]] | 전역으로 저장되는 심볼.       |

## 예제

### Symbol.for() 사용하기

```js
Symbol.for('foo'); // 새로운 전역 심볼을 생성
Symbol.for('foo'); // 이미 생성된 심볼을 반환

// 동일한 전역 심볼이지만 지역적으로는 그렇지 않음
Symbol.for('bar') === Symbol.for('bar'); // true
Symbol('bar') === Symbol('bar'); // false

// 키는 설명으로 사용되기도 함
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"
```

전역 심볼 키와 다른 (라이브러리 코드) 전역 심볼의 이름 충돌을 피하려면, 심볼에 접두어를 붙이는 것이 좋습니다.

```js
Symbol.for('mdn.foo');
Symbol.for('mdn.bar');
```

## 명세

{{Specifications}}

## 브라우저 호환성

{{Compat}}

## 같이 보기

- {{jsxref("Symbol.keyFor()")}}