객체(Object) vs 배열(Array) 성능 비교하기

GonnabeAlright·2022년 3월 27일
0
post-thumbnail

객체는 정렬되어 있을 필요가 없을 때 잘 작동합니다. 그리고 빠른 접근, 입력과 제거를 원할 때 좋습니다. 빠르다고 했을 때 입력, 제거, 접근하는 시간은 상수시간 입니다.

Big O of Objects

  • Insertion : O(1)
  • Removal : O(1)
  • Searching : O(N)
  • Access : O(1)

Big O of Object Methods

  • Object.keys : O(N)
  • Object.values : O(N)
  • Object.entries : O(N)
  • hasOwnProperty : O(1)

객체와는 다르게 배열은 정렬이 되어 있습니다. 그냥 한 뭉치로 있는 객체와는 다릅니다. 그리고 엘리먼트마다 붙어있는 인덱스가 존재합니다. 따라서 배열은 대부분 정렬되어 있는 데이터를 위해서 사용합니다.

Big O of Arrays

  • Insertion : It depends...
  • Removal : It depends...
  • Searching : O(N)
  • Access : O(1)

배열 끝에 요소를 추가하는 메소드인 push()를 이용할 경우 O(1)로 상수시간입니다. 하지만 배열의 앞에 요소를 추가하게 될 경우 기존에 배열마다 가지고 있는 인덱스를 새로 배정해야 합니다. 그렇기 때문에 배열 앞에 요소를 추가한다면 O(N)의 시간이 소요됩니다. 앞에서 제거하는 것도 같은 문제입니다. 제일 앞에 있는 요소를 삭제할 경우 인덱스를 반대 방향으로 다시 배정해야 합니다.

즉, 비어있는 배열을 제외한다면 push(), pop()shift(), unshift() 작업보다 빠릅니다. 아래 Big-o of Array Operations을 보겠습니다.

Big O of Array Operations

  • push : O(1)
  • pop : O(1)
  • shift : O(N)
  • unshift : O(N)
  • concat : O(N)
  • slice : O(N)
  • splice : O(N)
  • sort : O(NlogN)
  • forEach/map/filter/reduce/etc. : O(N)

0개의 댓글