Skip to content

Commit 5cbfe56

Browse files
krokerdileViolet-Bora-Lee
authored andcommitted
[배열] 1차 리뷰
1 parent e6971af commit 5cbfe56

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

1-js/05-data-types/04-array/article.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
그런데 개발을 진행하다 보면 첫 번째 요소, 두 번째 요소, 세 번째 요소 등과 같이 *순서가 있는 컬렉션*이 필요할 때가 생기곤 합니다. 사용자나 물건, HTML 요소 목록같이 일목요연하게 순서를 만들어 정렬하기 위해서 말이죠.
66

7-
객체를 순서가 있는 컬렉션을 다뤄야 할 때 사용하면 순서와 관련된 메서드가 없어 그다지 편리하지 않습니다. 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 "사이에" 끼워 넣는 것도 불가능합니다.
7+
객체를 순서가 있는 컬렉션을 다뤄야 할 때 사용하면 순서와 관련된 메서드가 없어 그다지 편리하지 않습니다. 태생이 순서를 고려하지 않고 만들어진 자료구조이기 때문에 객체를 이용하면 새로운 프로퍼티를 기존 프로퍼티 '사이에' 끼워 넣는 것도 불가능합니다.
88

99
이럴 땐 순서가 있는 컬렉션을 저장할 때 쓰는 자료구조인 `배열`을 사용할 수 있습니다.
1010

@@ -89,7 +89,7 @@ let fruits = [
8989
];
9090
```
9191
92-
trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가 유사해지기 때문에 요소를 넣거나 빼는 쉬워집니다.
92+
trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가 유사해지기 때문에 요소를 넣거나 빼는 것이 쉬워집니다.
9393
````
9494

9595

@@ -113,13 +113,13 @@ trailing(길게 늘어지는) 쉼표를 사용하면 모든 줄의 생김새가
113113
- `push` -- 요소를 스택 끝에 집어넣습니다.
114114
- `pop` -- 스택 끝 요소를 추출합니다.
115115

116-
스택은 이처럼 "한쪽 끝"에 요소를 더하거나 뺄 수 있게 해주는 자료구조입니다.
116+
스택은 이처럼 '한쪽 끝'에 요소를 더하거나 뺄 수 있게 해주는 자료구조입니다.
117117

118-
스택은 흔히 카드 한 벌과 비교됩니다. 쌓여있는 카드 맨 위에 새로운 카드를 더해주거나 빼는 것처럼 스택도 "한쪽 끝"에 요소를 집어넣거나 추출 할 수 있기 때문이죠.
118+
스택은 흔히 카드 한 벌과 비교됩니다. 쌓여있는 카드 맨 위에 새로운 카드를 더해주거나 빼는 것처럼 스택도 '한쪽 끝'에 요소를 집어넣거나 추출 할 수 있기 때문이죠.
119119

120120
![](stack.svg)
121121

122-
스택을 사용하면 나중에 집어넣은 요소가 먼저 나옵니다. 이런 특징을 줄여서 후입선출(Last-In-First-Out, LIFO)이라고 부릅니다. 반면 큐를 사용하면 먼저 집어넣은 요소가 먼저 나오기 때문에 큐는 선입선출(First-In-First-Out, FIFO) 자료구조라고 부릅니다.
122+
스택을 사용하면 가장 나중에 집어넣은 요소가 먼저 나옵니다. 이런 특징을 줄여서 후입선출(Last-In-First-Out, LIFO)이라고 부릅니다. 반면 큐를 사용하면 먼저 집어넣은 요소가 먼저 나오기 때문에 큐는 선입선출(First-In-First-Out, FIFO) 자료구조라고 부릅니다.
123123

124124
자바스크립트 배열을 사용하면 큐와 스택 둘 다를 만들 수 있습니다. 이 자료구조들은 배열의 처음이나 끝에 요소를 더하거나 빼는 데 사용되죠.
125125

@@ -209,9 +209,9 @@ arr.push("Pear"); // 참조를 이용해 배열을 수정합니다.
209209
alert( fruits ); // Banana, Pear - 요소가 두 개가 되었습니다.
210210
```
211211

212-
배열을 배열답게 만들어주는 것은 특수 내부 표현방식입니다. 자바스크립트 엔진은 하단에서 그림을 사용해 묘사한 것처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 외에도 배열 관련 연산을 더 빠르게 해주는 다양한 최적화 기법이 있습니다.
212+
배열 내부 표현방식은 배열을 특별하게 만들어줍니다. 자바스크립트 엔진은 하단에서 그림을 사용해 묘사한 것처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 외에도 배열 관련 연산을 더 빠르게 해주는 다양한 최적화 기법이 있습니다.
213213

214-
그런데 이런 기법들은 배열을 "순서가 있는 자료의 컬렉션"처럼 다루지 않고 일반 객체처럼 다루면 제대로 동작하지 않습니다.
214+
그런데 이런 기법들은 배열을 '순서가 있는 자료의 컬렉션'처럼 다루지 않고 일반 객체처럼 다루면 제대로 동작하지 않습니다.
215215

216216
예시를 들어봅시다.
217217

@@ -244,7 +244,7 @@ fruits.age = 25; // 임의의 이름을 사용해 프로퍼티를 만듭니다.
244244
배열의 앞에 무언가를 해주는 메서드보다 끝에 무언가를 해주는 메서드가 빠른 이유를 실행 흐름을 살펴보면서 알아보겠습니다.
245245

246246
```js
247-
fruits.shift(); // 배열 요소를 제거합니다.
247+
fruits.shift(); // 배열 맨 앞의 요소를 빼줍니다.
248248
```
249249

250250
`shift` 메서드를 호출한 것과 동일한 효과를 보려면 인덱스가 `0`인 요소를 제거하는 것만으론 충분하지 않습니다. 제거 대상이 아닌 나머지 요소들의 인덱스를 수정해 줘야 하죠.
@@ -318,16 +318,16 @@ for (let key in arr) {
318318

319319
1. `for..in` 반복문은 *모든 프로퍼티*를 대상으로 순회합니다. 키가 숫자가 아닌 프로퍼티도 순회 대상에 포함됩니다.
320320

321-
브라우저나 기타 호스트 환경에서 쓰이는 객체중, *배열*과 유사한 형태를 보이는 "유사 배열(array-like)" 객체가 있습니다. 유사 배열 객체엔 `length` 프로퍼티도 있고 요소마다 인덱스도 붙어 있는데, 여기에 더하여 키가 숫자가 아닌 프로퍼티와 배열에선 자주 쓰지 않는 메서드들도 있습니다. 유사 배열 객체와 `for..in`을 함께 사용하면 이 모든 것을 대상으로 순회가 이뤄지므로 "필요 없는" 프로퍼티가 문제를 일으킬 가능성이 생깁니다.
321+
브라우저나 기타 호스트 환경에서 쓰이는 객체중, *배열*과 유사한 형태를 보이는 '유사 배열(array-like)' 객체가 있습니다. 유사 배열 객체엔 `length` 프로퍼티도 있고 요소마다 인덱스도 붙어 있는데, 여기에 더하여 키가 숫자가 아닌 프로퍼티와 배열에선 자주 쓰지 않는 메서드들도 있습니다. 유사 배열 객체와 `for..in`을 함께 사용하면 이 모든 것을 대상으로 순회가 이뤄지므로 '필요 없는' 프로퍼티가 문제를 일으킬 가능성이 생깁니다.
322322

323323
2.`for..in` 반복문은 배열이 아니라 객체와 함께 사용할 때 최적화되어 있어, 배열에 사용하면 객체에 사용하는 것 대비 10~100배 정도 느립니다. 그런데도 속도가 대체로 빠른 편이고, 병목 지점에서만 이런 속도 차이가 문제가 되죠. `for..in` 반복문을 사용할 땐 이런 차이를 알고 적절한 곳에 사용하시길 바랍니다.
324324

325-
배열엔 `for..in`쓰지마세요.
325+
그렇기 떄문에 일반적으로 배열엔 `for..in`쓰지 않습니다.
326326

327327

328328
## "length" 프로퍼티
329329

330-
배열에 무언가 조작을 가하면 `length` 프로퍼티가 자동으로 갱신됩니다. 그런데 `length` 프로퍼티는 배열 내 요소의 개수가 아니라 가장 큰 인덱스에 1을 더한 값입니다.
330+
배열에 무언가 조작을 가하면 `length` 프로퍼티가 자동으로 갱신됩니다. 그런데 `length` 프로퍼티는 배열 내 요소의 개수가 아닌 가장 큰 인덱스에 1을 더한 값입니다.
331331

332332
배열에 요소가 하나 있는데, 이 요소의 인덱스가 아주 큰 정수라면 배열의 `length` 프로퍼티도 아주 커집니다.
333333

@@ -381,7 +381,7 @@ alert( arr.length ); // 길이: 2
381381

382382
위 예시에서 확인해 본 것처럼 `new Array(number)`를 이용해 만든 배열의 요소는 모두 `undefined` 입니다.
383383

384-
이런 뜻밖의 상황을 피하고자 대부분의 개발자가 `new Array`의 기능을 잘 알지 않는 한 대괄호를 써서 배열을 만듭니다.
384+
개발자가 `new Array`의 기능을 잘 아는 경우 외에는, 이런 뜻밖의 상황을 피하기위해 대괄호를 써서 배열을 만듭니다.
385385

386386
## 다차원 배열
387387

@@ -445,7 +445,7 @@ alert( "1,2" + 1 ); // "1,21"
445445

446446
`new Array(number)`을 호출하면 인수로 넘겨받은 값을 길이로 하는 배열이 만들어지는데, 요소는 비어있습니다.
447447

448-
- `length` 프로퍼티는 배열의 길이를 나타내줍니다. 정확히는 숫자형 인덱스 중 가장 큰 값에 1을 더한 값입니다. 배열 메서드는 `length` 프로퍼티를 자동으로 보정해줍니다.
448+
- `length` 프로퍼티는 배열의 길이를 나타내줍니다. 정확히는 숫자형 인덱스 중 가장 큰 값에 1을 더한 값입니다. 배열 메서드는 `length` 프로퍼티를 자동으로 조정해줍니다.
449449
- `length` 값을 수동으로 줄이면 배열 끝이 잘립니다.
450450

451451
다음과 같은 연산을 사용하면 배열을 데큐처럼 사용할 수 있습니다.

0 commit comments

Comments
 (0)