Skip to content

Commit 2193450

Browse files
committed
[충돌해결 및 번역] Part1 4.1~4.4 객체: 기본 (C08)
04-object-basics 범위의 upstream 병합 충돌을 해결합니다. 최신 원문 구조와 structuredClone 설명, 객체 메서드 과제 변경 사항을 한국어 문서에 반영합니다.
1 parent 71ab899 commit 2193450

5 files changed

Lines changed: 52 additions & 317 deletions

File tree

1-js/04-object-basics/01-object/article.md

Lines changed: 4 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55

66
그런데 객체형은 원시형과 달리 다양한 데이터를 담을 수 있습니다. 키로 구분된 데이터 집합이나 복잡한 개체(entity)를 저장할 수 있죠. 객체는 자바스크립트 거의 모든 면에 녹아있는 개념이므로 자바스크립트를 잘 다루려면 객체를 잘 이해하고 있어야 합니다.
77

8-
<<<<<<< HEAD
98
객체는 중괄호 `{…}`를 이용해 만들 수 있습니다. 중괄호 안에는 '키(key): 값(value)' 쌍으로 구성된 *프로퍼티(property)* 를 여러 개 넣을 수 있는데, ``엔 문자형, ``엔 모든 자료형이 허용됩니다. 프로퍼티 키는 '프로퍼티 이름' 이라고도 부릅니다.
10-
=======
11-
An object can be created with curly braces `{…}` with an optional list of *properties*. A property is a "key: value" pair, where `key` is a string (also called a "property name"), and `value` can be anything.
12-
>>>>>>> upstream/master
139

1410
서랍장을 상상하면 객체를 이해하기 쉽습니다. 서랍장 안 파일은 프로퍼티, 파일 각각에 붙어있는 이름표는 객체의 키라고 생각하시면 됩니다. 복잡한 서랍장 안에서 이름표를 보고 원하는 파일을 쉽게 찾을 수 있듯이, 객체에선 키를 이용해 프로퍼티를 쉽게 찾을 수 있습니다. 추가나 삭제도 마찬가지입니다.
1511

@@ -24,11 +20,7 @@ let user = {}; // '객체 리터럴' 문법
2420

2521
![](object-user-empty.svg)
2622

27-
<<<<<<< HEAD
2823
중괄호 `{...}`를 이용해 객체를 선언하는 것을 *객체 리터럴(object literal)* 이라고 부릅니다. 객체를 선언할 땐 주로 이 방법을 사용합니다.
29-
=======
30-
Usually, the curly braces `{...}` are used. That declaration is called an *object literal*.
31-
>>>>>>> upstream/master
3224

3325
## 리터럴과 프로퍼티
3426

@@ -52,11 +44,7 @@ let user = { // 객체
5244

5345
![user object](object-user.svg)
5446

55-
<<<<<<< HEAD
56-
서랍장에 파일을 추가하고 뺄 수 있듯이 개발자는 프로퍼티를 추가, 삭제할 수 있습니다.
57-
=======
58-
We can add, remove and read files from it at any time.
59-
>>>>>>> upstream/master
47+
서랍장에 파일을 추가하고, 꺼내 읽고, 뺄 수 있듯이 개발자는 프로퍼티를 추가, 조회, 삭제할 수 있습니다.
6048

6149
점 표기법(dot notation)을 이용하면 프로퍼티 값을 읽는 것도 가능합니다.
6250

@@ -74,11 +62,7 @@ user.isAdmin = true;
7462

7563
![user object 2](object-user-isadmin.svg)
7664

77-
<<<<<<< HEAD
7865
`delete` 연산자를 사용하면 프로퍼티를 삭제할 수 있습니다.
79-
=======
80-
To remove a property, we can use the `delete` operator:
81-
>>>>>>> upstream/master
8266

8367
```js
8468
delete user.age;
@@ -108,35 +92,8 @@ let user = {
10892
```
10993
이런 쉼표를 'trailing(길게 늘어지는)' 혹은 'hanging(매달리는)' 쉼표라고 부릅니다. 이렇게 끝에 쉼표를 붙이면 모든 프로퍼티가 유사한 형태를 보이기 때문에 프로퍼티를 추가, 삭제, 이동하는 게 쉬워집니다.
11094

111-
<<<<<<< HEAD
112-
````smart header="상수 객체는 수정될 수 있습니다."
113-
주의하세요. `const`로 선언된 객체는 수정될 수 있습니다.
114-
115-
예시:
116-
117-
```js run
118-
const user = {
119-
name: "John"
120-
};
121-
122-
*!*
123-
user.name = "Pete"; // (*)
124-
*/!*
125-
126-
alert(user.name); // Pete
127-
```
128-
129-
`(*)`로 표시한 줄에서 오류를 일으키는 것처럼 보일 수 있지만 그렇지 않습니다. `const`는 `user`의 값을 고정하지만, 그 내용은 고정하지 않습니다.
130-
131-
`const`는 `user=...`를 전체적으로 설정하려고 할 때만 오류가 발생합니다.
132-
133-
상수 객체 프로퍼티를 만드는 또 다른 방법이 있습니다. 이후에 <info:property-descriptors> 챕터에서 다루겠습니다.
134-
````
13595

13696
## 대괄호 표기법
137-
=======
138-
## Square brackets
139-
>>>>>>> upstream/master
14097

14198
여러 단어를 조합해 프로퍼티 키를 만든 경우엔, 점 표기법을 사용해 프로퍼티 값을 읽을 수 없습니다.
14299

@@ -245,21 +202,13 @@ let bag = {
245202
};
246203
```
247204

248-
<<<<<<< HEAD
249205
대괄호 표기법은 프로퍼티 이름과 값의 제약을 없애주기 때문에 점 표기법보다 훨씬 강력합니다. 그런데 작성하기 번거롭다는 단점이 있습니다.
250-
=======
251-
Square brackets are much more powerful than dot notation. They allow any property names and variables. But they are also more cumbersome to write.
252-
>>>>>>> upstream/master
253206

254207
이런 이유로 프로퍼티 이름이 확정된 상황이고, 단순한 이름이라면 처음엔 점 표기법을 사용하다가 뭔가 복잡한 상황이 발생했을 때 대괄호 표기법으로 바꾸는 경우가 많습니다.
255208

256209
## 단축 프로퍼티
257210

258-
<<<<<<< HEAD
259211
실무에선 프로퍼티 값을 기존 변수에서 받아와 사용하는 경우가 종종 있습니다.
260-
=======
261-
In real code, we often use existing variables as values for property names.
262-
>>>>>>> upstream/master
263212

264213
예시:
265214

@@ -304,11 +253,7 @@ let user = {
304253

305254
## 프로퍼티 이름의 제약사항
306255

307-
<<<<<<< HEAD
308-
아시다시피 변수 이름(키)엔 'for', 'let', 'return' 같은 예약어를 사용하면 안됩니다.
309-
=======
310-
As we already know, a variable cannot have a name equal to one of the language-reserved words like "for", "let", "return" etc.
311-
>>>>>>> upstream/master
256+
아시다시피 변수 이름엔 'for', 'let', 'return' 같은 예약어를 사용하면 안됩니다.
312257

313258
그런데 객체 프로퍼티엔 이런 제약이 없습니다.
314259

@@ -381,11 +326,7 @@ alert( "blabla" in user ); // user.blabla는 존재하지 않기 때문에 false
381326

382327
`in` 왼쪽엔 반드시 *프로퍼티 이름*이 와야 합니다. 프로퍼티 이름은 보통 따옴표로 감싼 문자열입니다.
383328

384-
<<<<<<< HEAD
385329
따옴표를 생략하면 아래 예시와 같이 엉뚱한 변수가 조사 대상이 됩니다.
386-
=======
387-
If we omit quotes, that means a variable should contain the actual name to be tested. For instance:
388-
>>>>>>> upstream/master
389330

390331
```js run
391332
let user = { age: 30 };
@@ -415,11 +356,7 @@ alert( "test" in obj ); // `in`을 사용하면 프로퍼티 유무를 제대로
415356
`undefined`는 변수는 정의되어 있으나 값이 할당되지 않은 경우에 쓰기 때문에 프로퍼티 값이 `undefined`인 경우는 흔치 않습니다. 값을 '알 수 없거나(unknown)' 값이 '비어 있다는(empty)' 것을 나타낼 때는 주로 `null`을 사용합니다. 위 예시에서 `in` 연산자는 자리에 어울리지 않는 초대손님처럼 보이네요.
416357
417358
418-
<<<<<<< HEAD
419-
## 'for..in' 반복문
420-
=======
421-
## The "for..in" loop [#forin]
422-
>>>>>>> upstream/master
359+
## 'for..in' 반복문 [#forin]
423360
424361
`for..in` 반복문을 사용하면 객체의 모든 키를 순회할 수 있습니다. `for..in`은 앞서 학습했던 `for(;;)` 반복문과는 완전히 다릅니다.
425362
@@ -476,11 +413,7 @@ for (let code in codes) {
476413
*/!*
477414
```
478415
479-
<<<<<<< HEAD
480416
현재 개발 중인 애플리케이션의 주 사용자가 독일인이라고 가정해 봅시다. 나라 번호를 선택하는 화면에서 `49`가 맨 앞에 오도록 하는 게 좋을 겁니다.
481-
=======
482-
The object may be used to suggest a list of options to the user. If we're making a site mainly for a German audience then we probably want `49` to be the first.
483-
>>>>>>> upstream/master
484417
485418
그런데 코드를 실행해 보면 예상과는 전혀 다른 결과가 출력됩니다.
486419
@@ -492,24 +425,14 @@ The object may be used to suggest a list of options to the user. If we're making
492425
````smart header="정수 프로퍼티? 그게 뭔가요?"
493426
'정수 프로퍼티'라는 용어는 변형 없이 정수에서 왔다 갔다 할 수 있는 문자열을 의미합니다.
494427
495-
<<<<<<< HEAD
496428
문자열 "49"는 정수로 변환하거나 변환한 정수를 다시 문자열로 바꿔도 변형이 없기 때문에 정수 프로퍼티입니다. 하지만 '+49'와 '1.2'는 정수 프로퍼티가 아닙니다.
497429
498430
```js run
431+
// Number(...)는 명시적으로 값을 숫자형으로 변환합니다.
499432
// 함수 Math.trunc는 소수점 아래를 버리고 숫자의 정수부만 반환합니다.
500433
alert( String(Math.trunc(Number("49"))) ); // '49'가 출력됩니다. 기존에 입력한 값과 같으므로 정수 프로퍼티입니다.
501434
alert( String(Math.trunc(Number("+49"))) ); // '49'가 출력됩니다. 기존에 입력한 값(+49)과 다르므로 정수 프로퍼티가 아닙니다.
502435
alert( String(Math.trunc(Number("1.2"))) ); // '1'이 출력됩니다. 기존에 입력한 값(1.2)과 다르므로 정수 프로퍼티가 아닙니다.
503-
=======
504-
So, `"49"` is an integer property name, because when it's transformed to an integer number and back, it's still the same. But `"+49"` and `"1.2"` are not:
505-
506-
```js run
507-
// Number(...) explicitly converts to a number
508-
// Math.trunc is a built-in function that removes the decimal part
509-
alert( String(Math.trunc(Number("49"))) ); // "49", same, integer property
510-
alert( String(Math.trunc(Number("+49"))) ); // "49", not same "+49" ⇒ not integer property
511-
alert( String(Math.trunc(Number("1.2"))) ); // "1", not same "1.2" ⇒ not integer property
512-
>>>>>>> upstream/master
513436
```
514437
````
515438
@@ -558,15 +481,9 @@ for (let code in codes) {
558481
- 프로퍼티 키는 문자열이나 심볼이어야 합니다. 보통은 문자열입니다.
559482
- 값은 어떤 자료형도 가능합니다.
560483
561-
<<<<<<< HEAD
562484
아래와 같은 방법을 사용하면 프로퍼티에 접근할 수 있습니다.
563485
- 점 표기법: `obj.property`
564486
- 대괄호 표기법 `obj["property"]`. 대괄호 표기법을 사용하면 `obj[varWithKey]`같이 변수에서 키를 가져올 수 있습니다.
565-
=======
566-
To access a property, we can use:
567-
- The dot notation: `obj.property`.
568-
- Square brackets notation `obj["property"]`. Square brackets allow taking the key from a variable, like `obj[varWithKey]`.
569-
>>>>>>> upstream/master
570487
571488
객체엔 다음과 같은 추가 연산자를 사용할 수 있습니다.
572489
- 프로퍼티를 삭제하고 싶을 때: `delete obj.prop`

0 commit comments

Comments
 (0)