본문으로 건너뛰기

배열

질문 List

배열 🔥

  1. 자바스크립트의 배열은 자료구조의 배열과 같나요?
  2. 배열의 메서드는 어떤 종류가 있나요?
  3. 고차 함수에 대해서 아나요?
  4. forEach 메서드와 map메서드의 차이점에 대해 알고 있나요?

질문 & 정답 List

배열 🔥

  • 배열 : 순서가 있는 컬렉션을 저장할 때 사용하는 자료구조
  • 배열 만드는 방법 2가지
    1. 배열 리터럴
      const arr = [1, 2, 3];$$
      ```$$
    2. Array 생성자 함수
      const arr = new Array(1, 2, 3);
    • 위 두 가지 방식은 차이가 없으며, JS에서는 배열 리터럴([]) 사용을 권장\
  • JS 배열의 특징
    1. 배열 내부의 데이터 타입이 서로 다를 수 있다.
    2. 배열의 크기는 동적으로 변경할 수 있다. (크기 자동 결정)

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에서 사용할 수 있는 모든 값은 객체의 프로퍼티 값이 될 수 있음
  1. 장점
    1. 특정 요소를 탐색하거나 요소를 삽입 또는 삭제하는 경우 일반적인 배열보다 빠름
  2. 단점
    1. 해시 테이블로 구현된 객체이므로 인덱스로 배열 요소에 접근하는 경우 일반적인 배열보다 성능적인 면에서 느림

2. 배열의 메서드는 어떤 종류가 있나요?

  1. sort() : 정렬
  2. join() : 배열 -> 문자열 변환
  3. concat() : 배열 합치기
  4. slice() : 배열 일부 추출
  5. splice() : 배열 일부 추출 후 제거
  6. push() : 배열 끝에 요소 추가
  7. pop() : 배열 끝 요소 제거
  8. unshift() : 배열 앞에 요소 추가
  9. shift() : 배열 앞 요소 제거
  10. reverse() : 배열 순서 뒤집기
  11. indexOf() : 배열 요소 위치 검색
  12. lastIndexOf() : 배열 요소 위치 검색(뒤에서부터)
  13. includes() : 배열 요소 포함 여부 확인
  14. some() : 배열 요소 중 하나라도 특정 조건을 만족하는지 확인
    • includes()의 콜백함수 버전
  15. every() : 배열 요소 모두가 특정 조건을 만족하는지 확인
    • some()의 반대 버전
  16. find() : 배열 요소 중 특정 조건을 만족하는 첫 번째 요소 반환.
    • 찾고자하는 값을 그대로 반환
  17. findIndex() : 배열 요소 중 특정 조건을 만족하는 첫 번째 요소의 인덱스 반환
    • find()의 리턴값이 인덱스인 버전
  18. filter() : 배열 요소 중 특정 조건을 만족하는 모든 요소를 추출하여 새로운 배열로 반환
  19. map() : 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출하고, 콜백 함수의 반환값으로 새로운 배열을 생성
  20. reduce() : 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출하고, 콜백 함수의 반환값을 다음 순회 시에 콜백 함수의 첫 번째 인수(accumulator)로 전달하여 순회를 끝낼 때까지 반복하며 단일 값 반환
    • forEach, map, filter기능을 모두 reduce로 구현할 수 있어 고차함수의 부모라고 불림
  21. forEach() : 배열 요소를 순회하며 인수로 전달받은 콜백 함수를 반복 호출
  22. from() : 유사 배열 객체 또는 이터러블 객체를 얕게 복사하여 새로운 배열 객체를 생성

3. 고차 함수에 대해서 아나요?

  • 고차 함수 : 함수를 인수로 전달받거나 함수를 반환하는 함수
    • 함수형 프로그래밍의 핵심
    • 함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어의 구조를 표현하려는 프로그래밍 패러다임
      • 함수를 다른 함수의 파라미터로 넘길 수도 있고 반환(return) 값으로 함수를 받을 수도 있는 프로그래밍 형태

4. forEach 메서드와 map메서드의 차이점에 대해 알고 있나요?

  • forEach() : 배열의 각 요소에 대해 callback을 실행
    • 배열을 순회하므로 중간에 "break;" 문을 사용할 수 없습니다. 이런 경우라면 for( )문을 사용해야 합니다.
  • map() : 배열의 각 요소에 대해 callback을 실행하고 실행결과를 모은 새 배열을 리턴합니다.
    • 배열을 순회하므로 중간에 "break;" 문을 사용할 수 없습니다. 이런 경우라면 for( )문을 사용해야 합니다.
  • 단순 반복이라면 for(), 배열을 순회하려면 forEach(), 배열을 순회 후 새 배열을 얻고 싶다면 map() 사용 권장

Reference