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/05-data-types/04-array/article.md
+13-13Lines changed: 13 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
그런데 개발을 진행하다 보면 첫 번째 요소, 두 번째 요소, 세 번째 요소 등과 같이 *순서가 있는 컬렉션*이 필요할 때가 생기곤 합니다. 사용자나 물건, HTML 요소 목록같이 일목요연하게 순서를 만들어 정렬하기 위해서 말이죠.
6
6
7
-
객체를 순서가 있는 컬렉션을 다뤄야 할 때 사용하면 순서와 관련된 메서드가 없어 그다지 편리하지 않습니다. 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 "사이에" 끼워 넣는 것도 불가능합니다.
7
+
객체를 순서가 있는 컬렉션을 다뤄야 할 때 사용하면 순서와 관련된 메서드가 없어 그다지 편리하지 않습니다. 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 '사이에' 끼워 넣는 것도 불가능합니다.
8
8
9
9
이럴 땐 순서가 있는 컬렉션을 저장할 때 쓰는 자료구조인 `배열`을 사용할 수 있습니다.
10
10
@@ -89,7 +89,7 @@ let fruits = [
89
89
];
90
90
```
91
91
92
-
trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가 유사해지기 때문에 요소를 넣거나 빼는 게 쉬워집니다.
92
+
trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가 유사해지기 때문에 요소를 넣거나 빼는 것이 쉬워집니다.
93
93
````
94
94
95
95
@@ -113,13 +113,13 @@ trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가
113
113
-`push` -- 요소를 스택 끝에 집어넣습니다.
114
114
-`pop` -- 스택 끝 요소를 추출합니다.
115
115
116
-
스택은 이처럼 "한쪽 끝"에 요소를 더하거나 뺄 수 있게 해주는 자료구조입니다.
116
+
스택은 이처럼 '한쪽 끝'에 요소를 더하거나 뺄 수 있게 해주는 자료구조입니다.
117
117
118
-
스택은 흔히 카드 한 벌과 비교됩니다. 쌓여있는 카드 맨 위에 새로운 카드를 더해주거나 빼는 것처럼 스택도 "한쪽 끝"에 요소를 집어넣거나 추출 할 수 있기 때문이죠.
118
+
스택은 흔히 카드 한 벌과 비교됩니다. 쌓여있는 카드 맨 위에 새로운 카드를 더해주거나 빼는 것처럼 스택도 '한쪽 끝'에 요소를 집어넣거나 추출 할 수 있기 때문이죠.
119
119
120
120

121
121
122
-
스택을 사용하면 나중에 집어넣은 요소가 먼저 나옵니다. 이런 특징을 줄여서 후입선출(Last-In-First-Out, LIFO)이라고 부릅니다. 반면 큐를 사용하면 먼저 집어넣은 요소가 먼저 나오기 때문에 큐는 선입선출(First-In-First-Out, FIFO) 자료구조라고 부릅니다.
122
+
스택을 사용하면 가장 나중에 집어넣은 요소가 먼저 나옵니다. 이런 특징을 줄여서 후입선출(Last-In-First-Out, LIFO)이라고 부릅니다. 반면 큐를 사용하면 먼저 집어넣은 요소가 먼저 나오기 때문에 큐는 선입선출(First-In-First-Out, FIFO) 자료구조라고 부릅니다.
123
123
124
124
자바스크립트 배열을 사용하면 큐와 스택 둘 다를 만들 수 있습니다. 이 자료구조들은 배열의 처음이나 끝에 요소를 더하거나 빼는 데 사용되죠.
125
125
@@ -209,9 +209,9 @@ arr.push("Pear"); // 참조를 이용해 배열을 수정합니다.
209
209
alert( fruits ); // Banana, Pear - 요소가 두 개가 되었습니다.
210
210
```
211
211
212
-
배열을 배열답게 만들어주는 것은 특수 내부 표현방식입니다. 자바스크립트 엔진은 하단에서 그림을 사용해 묘사한 것처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 외에도 배열 관련 연산을 더 빠르게 해주는 다양한 최적화 기법이 있습니다.
212
+
배열 내부 표현방식은 배열을 특별하게 만들어줍니다. 자바스크립트 엔진은 하단에서 그림을 사용해 묘사한 것처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 외에도 배열 관련 연산을 더 빠르게 해주는 다양한 최적화 기법이 있습니다.
213
213
214
-
그런데 이런 기법들은 배열을 "순서가 있는 자료의 컬렉션"처럼 다루지 않고 일반 객체처럼 다루면 제대로 동작하지 않습니다.
214
+
그런데 이런 기법들은 배열을 '순서가 있는 자료의 컬렉션'처럼 다루지 않고 일반 객체처럼 다루면 제대로 동작하지 않습니다.
215
215
216
216
예시를 들어봅시다.
217
217
@@ -244,7 +244,7 @@ fruits.age = 25; // 임의의 이름을 사용해 프로퍼티를 만듭니다.
244
244
배열의 앞에 무언가를 해주는 메서드보다 끝에 무언가를 해주는 메서드가 빠른 이유를 실행 흐름을 살펴보면서 알아보겠습니다.
245
245
246
246
```js
247
-
fruits.shift(); // 배열 앞 요소를 제거합니다.
247
+
fruits.shift(); // 배열 맨 앞의 요소를 빼줍니다.
248
248
```
249
249
250
250
`shift` 메서드를 호출한 것과 동일한 효과를 보려면 인덱스가 `0`인 요소를 제거하는 것만으론 충분하지 않습니다. 제거 대상이 아닌 나머지 요소들의 인덱스를 수정해 줘야 하죠.
@@ -318,16 +318,16 @@ for (let key in arr) {
318
318
319
319
1.`for..in` 반복문은 *모든 프로퍼티*를 대상으로 순회합니다. 키가 숫자가 아닌 프로퍼티도 순회 대상에 포함됩니다.
320
320
321
-
브라우저나 기타 호스트 환경에서 쓰이는 객체중, *배열*과 유사한 형태를 보이는 "유사 배열(array-like)" 객체가 있습니다. 유사 배열 객체엔 `length` 프로퍼티도 있고 요소마다 인덱스도 붙어 있는데, 여기에 더하여 키가 숫자가 아닌 프로퍼티와 배열에선 자주 쓰지 않는 메서드들도 있습니다. 유사 배열 객체와 `for..in`을 함께 사용하면 이 모든 것을 대상으로 순회가 이뤄지므로 "필요 없는" 프로퍼티가 문제를 일으킬 가능성이 생깁니다.
321
+
브라우저나 기타 호스트 환경에서 쓰이는 객체중, *배열*과 유사한 형태를 보이는 '유사 배열(array-like)' 객체가 있습니다. 유사 배열 객체엔 `length` 프로퍼티도 있고 요소마다 인덱스도 붙어 있는데, 여기에 더하여 키가 숫자가 아닌 프로퍼티와 배열에선 자주 쓰지 않는 메서드들도 있습니다. 유사 배열 객체와 `for..in`을 함께 사용하면 이 모든 것을 대상으로 순회가 이뤄지므로 '필요 없는' 프로퍼티가 문제를 일으킬 가능성이 생깁니다.
322
322
323
323
2.`for..in` 반복문은 배열이 아니라 객체와 함께 사용할 때 최적화되어 있어, 배열에 사용하면 객체에 사용하는 것 대비 10~100배 정도 느립니다. 그런데도 속도가 대체로 빠른 편이고, 병목 지점에서만 이런 속도 차이가 문제가 되죠. `for..in` 반복문을 사용할 땐 이런 차이를 알고 적절한 곳에 사용하시길 바랍니다.
324
324
325
-
배열엔 `for..in`를 쓰지마세요.
325
+
그렇기 떄문에 일반적으로 배열엔 `for..in`를 쓰지 않습니다.
326
326
327
327
328
328
## "length" 프로퍼티
329
329
330
-
배열에 무언가 조작을 가하면 `length` 프로퍼티가 자동으로 갱신됩니다. 그런데 `length` 프로퍼티는 배열 내 요소의 개수가 아니라 가장 큰 인덱스에 1을 더한 값입니다.
330
+
배열에 무언가 조작을 가하면 `length` 프로퍼티가 자동으로 갱신됩니다. 그런데 `length` 프로퍼티는 배열 내 요소의 개수가 아닌 가장 큰 인덱스에 1을 더한 값입니다.
331
331
332
332
배열에 요소가 하나 있는데, 이 요소의 인덱스가 아주 큰 정수라면 배열의 `length` 프로퍼티도 아주 커집니다.
333
333
@@ -381,7 +381,7 @@ alert( arr.length ); // 길이: 2
381
381
382
382
위 예시에서 확인해 본 것처럼 `new Array(number)`를 이용해 만든 배열의 요소는 모두 `undefined` 입니다.
383
383
384
-
이런 뜻밖의 상황을 피하고자 대부분의 개발자가 `new Array`의 기능을 잘 알지 않는 한 대괄호를 써서 배열을 만듭니다.
384
+
개발자가 `new Array`의 기능을 잘 아는 경우 외에는, 이런 뜻밖의 상황을 피하기위해 대괄호를 써서 배열을 만듭니다.
385
385
386
386
## 다차원 배열
387
387
@@ -445,7 +445,7 @@ alert( "1,2" + 1 ); // "1,21"
445
445
446
446
`new Array(number)`을 호출하면 인수로 넘겨받은 값을 길이로 하는 배열이 만들어지는데, 요소는 비어있습니다.
447
447
448
-
-`length` 프로퍼티는 배열의 길이를 나타내줍니다. 정확히는 숫자형 인덱스 중 가장 큰 값에 1을 더한 값입니다. 배열 메서드는 `length` 프로퍼티를 자동으로 보정해줍니다.
448
+
-`length` 프로퍼티는 배열의 길이를 나타내줍니다. 정확히는 숫자형 인덱스 중 가장 큰 값에 1을 더한 값입니다. 배열 메서드는 `length` 프로퍼티를 자동으로 조정해줍니다.
0 commit comments