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
어떤 사람들은 `class`라는 키워드 없이도 클래스 역할을 하는 함수를 선언할 수 있어서 `클래스`는 '편의 문법(syntactic sugar, 기존 문법을 편리하게 읽기 위해 만든 문법으로, 기능은 동일함)'에 불과하다고 이야기합니다.
121
+
어떤 사람들은 `class`라는 키워드 없이도 클래스 역할을 하는 함수를 선언할 수 있기 때문에 `클래스`는 '편의 문법'에 불과하다고 이야기합니다. 참고로 기능은 동일하나 기존 문법을 쉽게 읽을 수 있게 만든 문법을 편의 문법(syntactic sugar, 문법 설탕)이라고 합니다.
122
122
123
123
```js run
124
-
//순수 함수만으로 class User와 동일한 기능을 하는 코드를 만들어보겠습니다.
124
+
// class User와 동일한 기능을 하는 순수 함수를 만들어보겠습니다.
125
125
126
126
// 1. 생성자 함수를 만듭니다.
127
127
functionUser(name) {
128
128
this.name= name;
129
129
}
130
-
// 모든 함수의 프로토타입은 constructor 프로퍼티를 기본으로 갖고 있으므로
130
+
// 모든 함수의 프로토타입은 constructor 프로퍼티를 기본으로 갖고 있기 때문에
131
131
// constructor 프로퍼티를 명시적으로 만들 필요가 없습니다.
132
132
133
-
// 2. prototype 프로퍼티에 메서드를 추가합니다.
133
+
// 2. prototype에 메서드를 추가합니다.
134
134
User.prototype.sayHi=function() {
135
135
alert(this.name);
136
136
};
@@ -140,13 +140,13 @@ let user = new User("John");
140
140
user.sayHi();
141
141
```
142
142
143
-
위 예시처럼 순수 함수로 클래스 역할을 하는 함수를 선언하는 방법과 `class` 키워드를 사용하는 방법의 결과는 거의 같습니다. `class`를 사용하는 방법이 단순한 편의 문법이라고 생각하는 이유가 여기에 있습니다.
143
+
위 예시처럼 순수 함수로 클래스 역할을 하는 함수를 선언하는 방법과 `class` 키워드를 사용하는 방법의 결과는 거의 같습니다. `class`가 단순한 편의 문법이라고 생각하는 이유가 여기에 있습니다.
144
144
145
-
그럼에도 불구하고, 두 방법에는 다음과 같은 중요한 차이점 몇 가지가 있습니다.
145
+
그런데 두 방법에는 중요한 차이가 몇 가지 있습니다.
146
146
147
-
1.`class`로 만든 함수엔 수동으로 만든 함수와는 달리 특수한 내부 프로퍼티인 `[[FunctionKind]]:"classConstructor"`가 이름표처럼 붙습니다.
147
+
1.`class`로 만든 함수엔 특수 내부 프로퍼티인 `[[FunctionKind]]:"classConstructor"`가 이름표처럼 붙습니다. 이것만으로도 두 방법엔 분명한 차이가 있음을 알 수 있습니다.
148
148
149
-
여기에 더하여 일반 함수와 달리 클래스 생성자는 반드시 `new`와 함께 호출해야 합니다.
149
+
여기에 더하여 클래스 생성자는 일반 함수와 달리 반드시 `new`와 함께 호출해야 합니다.
150
150
151
151
```js run
152
152
classUser {
@@ -167,21 +167,21 @@ user.sayHi();
167
167
alert(User); // class User { ... }
168
168
```
169
169
170
-
2. 클래스 메서드는 열거형이 아닙니다(non-enumerable).
171
-
클래스의 `"prototype"` 프로퍼티에 추가된 모든 메서드의`enumerable` 플래그는 `false`입니다.
170
+
2. 클래스 메서드는 열거할 수 없습니다(non-enumerable).
171
+
클래스의 `"prototype"` 프로퍼티에 추가된 메서드 전체의`enumerable` 플래그는 `false`입니다.
172
172
173
-
`for..in`으로 객체를 순회할 때, 메서드는 순회 대상에서 제외하고자 하는 경우가 많으므로 이 특징은 도움이 됩니다.
173
+
`for..in`으로 객체를 순회할 때, 메서드는 순회 대상에서 제외하고자 하는 경우가 많음므로 이 특징은 도움이 됩니다.
174
174
175
175
3. 클래스는 항상 `엄격 모드`로 실행됩니다(`use strict`).
176
-
클래스 생성자 안의 모든 코드엔 자동으로 엄격 모드가 적용됩니다.
176
+
클래스 생성자 안 코드 전체엔 자동으로 엄격 모드가 적용됩니다.
177
177
178
-
이 외에도 `class`를 사용하면 다양한 기능이 따라오는데, 이에 대해선 추후에 다루도록 하겠습니다.
178
+
이 외에도 `class`를 사용하면 다양한 기능이 따라오는데, 자세한 내용은 곧 다루겠습니다.
179
179
180
180
## 클래스 표현식
181
181
182
-
함수와 마찬가지로 클래스도 또 다른 표현식 내부에서 정의, 전달, 반환, 할당될 수 있습니다.
182
+
함수처럼 클래스도 다른 표현식 내부에서 정의, 전달, 반환, 할당될 수 있습니다.
183
183
184
-
아래는 클래스 표현식에 대한 예시입니다.
184
+
클래스 표현식을 만들어보겠습니다.
185
185
186
186
```js
187
187
let User = class {
@@ -191,7 +191,7 @@ let User = class {
191
191
};
192
192
```
193
193
194
-
기명 함수 표현식(Named Function Expression)과 유사하게 클래스 표현식도 이름을 붙일 수 있습니다.
194
+
기명 함수 표현식(Named Function Expression)과 유사하게 클래스 표현식에도 이름을 붙일 수 있습니다.
195
195
196
196
클래스 표현식에 이름을 붙이면, 이 이름은 오직 클래스 내부에서만 사용할 수 있습니다.
197
197
@@ -206,7 +206,7 @@ let User = class *!*MyClass*/!* {
206
206
207
207
new User().sayHi(); // 제대로 동작합니다(MyClass의 정의를 보여줌).
208
208
209
-
alert(MyClass); // 에러가 발생합니다. MyClass는 클래스 밖에서 사용할 수 없습니다.
209
+
alert(MyClass); // Error: MyClass is not defined, MyClass는 클래스 밖에서 사용할 수 없습니다.
210
210
```
211
211
212
212
@@ -229,11 +229,11 @@ new User().sayHi(); // Hello
229
229
```
230
230
231
231
232
-
## getter,setter를 비롯한 기타 단축 구문
232
+
## getter·setter를 비롯한 기타 단축 문법
233
233
234
-
리터럴 표기법을 사용해 만든 객체처럼 클래스도 getter나 setter, 계산된 프로퍼티(computed property)를 포함할 수 있습니다.
234
+
리터럴을 사용해 만든 객체처럼 클래스도 getter나 setter, 계산된 프로퍼티(computed property)를 포함할 수 있습니다.
235
235
236
-
아래 예시에선 `get`과`set`을 이용해 `user.name`에 값을 할당하고 있습니다.
0 commit comments