배열
질문 List
배열 🔥
- 자바스크립트의 배열은 자료구조의 배열과 같나요?
- 배열의 메서드는 어떤 종류가 있나요?
- 고차 함수에 대해서 아나요?
- forEach 메서드와 map메서드의 차이점에 대해 알고 있나요?
질문 & 정답 List
배열 🔥
- 배열 : 순서가 있는 컬렉션을 저장할 때 사용하는 자료구조
- 배열 만드는 방법 2가지
- 배열 리터럴
const arr = [1, 2, 3];$$
```$$ - Array 생성자 함수
const arr = new Array(1, 2, 3);
- 위 두 가지 방식은 차이가 없으며, JS에서는 배열 리터럴([]) 사용을 권장\
- 배열 리터럴
- JS 배열의 특징
- 배열 내부의 데이터 타입이 서로 다를 수 있다.
- 배열의 크기는 동적으로 변경할 수 있다. (크기 자동 결정)
1. 자바스크립트의 배열은 자료구조의 배열과 같나요?
- 일반적으로 배열이라는 자료 구조의 개념은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조를 말함. 즉, 배열의 요소는 하나의 타입으로 통일되어 있으며 서로 연속적으로 인접해 있음. 이를 밀집 배열이라 함
- JS의 배열은 배열 요소가 연속적으로 이어져 있지 않으며 '희소 배열'이라고 함
console.log(Object.getOwnPropertyDescriptors([1, 2, 3]));
// {
// '0': { value: 1, writable: true, enumerable: true, configurable: true },
// '1': { value: 2, writable: true, enumerable: true, configurable: true },
// '2': { value: 3, writable: true, enumerable: true, configurable: true },
// length: { value: 3, writable: true, enumerable: false, configurable: false }
// }- 일반적인 배열의 동작을 흉내낸 특수한 객체
- JS의 배열은 인덱스를 프로퍼티 키로 갖으며 length 프로터피를 갖는 특수한 객체
- JS에서 사용할 수 있는 모든 값은 객체의 프로퍼티 값이 될 수 있음
- 장점
- 특정 요소를 탐색하거나 요소를 삽입 또는 삭제하는 경우 일반적인 배열보다 빠름
- 단점
- 해시 테이블로 구현된 객체이므로 인덱스로 배열 요소에 접근하는 경우 일반적인 배열보다 성능적인 면에서 느림
2. 배열의 메서드는 어떤 종류가 있나요?
sort()
: 정렬join()
: 배열 -> 문자열 변환concat()
: 배열 합치기slice()
: 배열 일부 추출splice()
: 배열 일부 추출 후 제거push()
: 배열 끝에 요소 추가pop()
: 배열 끝 요소 제거unshift()
: 배열 앞에 요소 추가shift()
: 배열 앞 요소 제거reverse()
: 배열 순서 뒤집기indexOf()
: 배열 요소 위치 검색lastIndexOf()
: 배열 요소 위치 검색(뒤에서부터)includes()
: 배열 요소 포함 여부 확인some()
: 배열 요소 중 하나라도 특정 조건을 만족하는지 확인- includes()의 콜백함수 버전
every()
: 배열 요소 모두가 특정 조건을 만족하는지 확인- some()의 반대 버전
find()
: 배열 요소 중 특정 조건을 만족하는 첫 번째 요소 반환.- 찾고자하는 값을 그대로 반환
findIndex()
: 배열 요소 중 특정 조건을 만족하는 첫 번째 요소의 인덱스 반환find()
의 리턴값이 인덱스인 버전
filter()
: 배열 요소 중 특정 조건을 만족하는 모든 요소를 추출하여 새로운 배열로 반환map()
: 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출하고, 콜백 함수의 반환값으로 새로운 배열을 생성reduce()
: 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출하고, 콜백 함수의 반환값을 다음 순회 시에 콜백 함수의 첫 번째 인수(accumulator)로 전달하여 순회를 끝낼 때까지 반복하며 단일 값 반환- forEach, map, filter기능을 모두 reduce로 구현할 수 있어 고차함수의 부모라고 불림
forEach()
: 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출from()
: 유사 배열 객체 또는 이터러블 객체를 얕게 복사하여 새로운 배열 객체를 생성
3. 고차 함수에 대해서 아나요?
- 고차 함수 : 함수를 인수로 전달받거나 함수를 반환하는 함수
- 함수형 프로그래밍의 핵심
- 함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어의 구조를 표현하려는 프로그래밍 패러다임
- 함수를 다른 함수의 파라미터로 넘길 수도 있고 반환(return) 값으로 함수를 받을 수도 있는 프로그래밍 형태
4. forEach 메서드와 map메서드의 차이점에 대해 알고 있나요?
forEach()
: 배열의 각 요소에 대해 callback을 실행- 배열을 순회하므로 중간에 "break;" 문을 사용할 수 없습니다. 이런 경우라면 for( )문을 사용해야 합니다.
map()
: 배열의 각 요소에 대해 callback을 실행하고 실행결과를 모은 새 배열을 리턴합니다.- 배열을 순회하므로 중간에 "break;" 문을 사용할 수 없습니다. 이런 경우라면 for( )문을 사용해야 합니다.
- 단순 반복이라면 for(), 배열을 순회하려면 forEach(), 배열을 순회 후 새 배열을 얻고 싶다면 map() 사용 권장