[Data_Structure] Array

먹보·2022년 12월 15일
0

✍️ Array 특징

  • 순차적으로 데이터를 저장 (저장된 데이터는 요소라고 불리 운다)
    • ❓ 실제 저장 메모리 상에서, 물리적으로 데이터가 순차적으로 저장되기 때문
  • 연결된 데이터를 순차적으로 저장할 때 사용 (또는 데이터들이 서로 연결되어 있다 느낄 때 사용)
  • 새로 삽입되는 순서대로 저장되며, 중복된 값도 저장이 가능하다.
  • [[1,2,3],[2.3,4]] 다중 차원 배열 (Multi-dimensional Array)

⇒ 위에 언급되어 있듯이 ARRAY는 순차적으로 데이터가 저장되기에 데이터에 순서 값이 정해져 있으며 이걸 Index라고 부르고 첫 번째 값의 Index는 0 그리고 맨 마지막 번째는 데이터의 길이보다 1 작거나 혹은 -1 이라고 한다.

이론적으로 자바스크립트의 배열 내에는 다양한 데이터 타입을 삽입할 수 있으나, 타입에러로 발생 할 수 있는 문제를 줄이기 위해 이를 지양한다.

✍️ 배열 접근 방식

📝 랜덤 접근

  • 동일한 시간에 순차적인 데이터가 있을 때 임의의 인덱스에 해당하는 데이터에 바로 접근 할 수 있는 방식
const arr = [1,2,3,4,5]

console.log(arr[2]) // 3

📝 순차적 접근

  • 저장된 순서대로 검색해야는 순차적 접근 방식
const arr = [1, 2, 3, 4, 5];

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]); 
}

arr.forEach(function(element) {
  console.log(element); 
});

const newArr = arr.map(function(element) {
  return element * 2; 
});
console.log(newArr);

✍️ Array 단점

  • 항상 순차적으로 데이터가 저장되기 때문에 중간에 데이터 값이 삭제 혹은 추가될 경우, 순서에 배치가 달라져 삭제 처리가 다소 느릴 수 있다. (expensive operation)

⇒ 중간에 데이터가 삭제 혹은 추가되는 경우가 많을 경우에는 Array 구조는 적절치 않다.

⇒ 이러한 단점을 해결하기 위해 생긴 자료 구조가 Linked List이다. 이 것은 Array와는 비슷하지만 다르게 각각의 원소들이 자기 자신의 위치를 자기 자신 다음에 오는 원소가 무엇인지를 기준으로 기억을 하고 있기 때문에 삭제 혹은 추가 후의 처리가 비교적 완만하다. 하지만 이 구조 역시 Array와 다른 점이 발목을 잡아 논리적 저장 순서와 물리적 저장 순서가 일치하지 않기에 특정 원소를 찾는 데 시간이 걸린다...뭐 그렇다고 해서 쓸모없는 자료 구조는 아니기에 기억은 해두자

  • Resizing (재 할당) : 컴퓨터는 처음 배열이 만들어졌을 때, 데이터의 숫자 만큼만의 공간을 만들어 놓는 것이 아닌 추후 추가될 가능성을 고려해 특정 공간을 미리 할당을 한다 (Pre-Allocation). 만약, 그 이상의 데이터가 들어왔을 경우에는 추가 확장성까지 다시 고려해서 새로운 공간을 만드는데, 이 작업은 부하가 생각보다 무거운 작업이기에 변동성이 큰 데이터를 다루기에는 적합하지 않다.

Array와 Linked List가 비슷한 특성을 가지고 있기 때문에 서로의 비교 대상이 되는데 자세한 비교 내용은 Linked List게시글에서 볼 수 있다.

✍️ Array 사용처

  • 순차적인 데이터 저장
  • 다차원 데이터 정리
  • 인덱스를 유용하게 쓸 수 있는 데이터
  • 변동성이 (추가 또는 삭제 포함) 적은 데이터

✍️ Array의 시간 복잡도

  • 접근 : O(1)
  • 탐색 : O(n)
  • 삽입 : O(n)
  • 삭제 : O(n)

시간 복잡도는 프로그래머들이 설계한 로직과 데이터 구조에 따라 달라질 수 가 있다. 그렇기 때문에 모든 상황을 고려해서 작성해 놓을 수 없기에 여기에는 내가 찾은 값만 내 기준에 맞춰 작성해보려고 하니 참고 부탁드립니다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글