Web Development/자료구조

[자료구조] 배열 (Array)

devflate 2024. 4. 21. 10:56
  1. 무엇인가
    • 일반 명사 : 일정한 차례나 간격에 따라 벌여 놓음 / 동일한 성격의 데이터를 관리하기 쉽도록 하나로 묶는 일
    • 고유 명사 : 동일한 특성을 가지며, 일정한 규칙에 따라여러 요소가 나열되어 있는 데이터들의 집합
  2. 왜 사용하는가?
    여러 값들을 각각 하나의 변수에 할당해서 사용하는 것은 코드의 가독성과 관리가 어렵다.
    배열을 사용한다면, 동일한 데이터 타입의 여러 값을 하나의 변수로 관리할 수 있어 코드의 가독성과 관리가 편리해진다.

  3. 어떻게 사용하는가?
    • 인덱스와 값의 쌍으로 이루어진 연속적인 메모리의 집합이다.
    • 배열은 값에 접근할 때, O(1)의 시간 복잡도를 갖는다.
      (배열이 인덱스를 참조하여 값에 접근할 때는, 배열의 첫 번째 원소를 기준으로 요청된 인덱스만큼 원소를 건너 뛰어서 그 값에 접근한다.)
  4. 메모리 상의 배열과 주소 계산
    배열이 선언되면, 배열의 크기만큼 메모리에 연속적인 공간을 할당한다.
    할당된 공간에는 각 인덱스에 대응하는 값이 들어간다.
    배열의 시작 주소와 인덱스(i)를 알 수 있다면,
    시작 주소 + (데이터형의 크기) * 인덱스 를 통해서, 배열[i]의 주소를 알 수 있다.
  5. 자바스크립트의 배열
    자바스크립트에서는 배열을 불연속적으로 할당한다. 불연속적으로 할당한 메모리를 내부적으로 연결해서, 배열인 것처럼 보이게 한다.

  6. 배열의 장단점
    1. 장점
      - 읽기, 쓰기와 같은 참조 시 O(1)의 성능을 가진다.
    2. 단점
      - 크기 예측이 힘들기 때문에 메모리 낭비가 발생할 수 있다.
      - 데이터의 삽입, 삭제가 비효율적이다.
      (배열의 크기 변경을 위해서는, 추가적인 연속적인 공간 확보 및 기존 데이터의 복사가 필요하다.)
  7. 참조
    - https://codedragon.tistory.com/7468
    - https://hong-study.tistory.com/16
    - https://terms.naver.com/entry.naver?docId=3611968&cid=58598&categoryId=59316
    - https://limecoding.tistory.com/78