-
Object
객체는 정렬되어 있지 않은 데이터 구조이다. 모두 key와 value값이 짝을 이뤄 저장되어 있다.
객체는 언제 사용하나?
- 데이터가 정렬되어 있을 필요가 없을 때
- 빠른 접근, 입력, 제거를 원할 때 (입력, 제거, 접근하는 시간이 상수 시간이다. 탐색은 선형 시간이다.)
👉 Insertion = O(1)
👉 Removal = O(1)
👉 Searching = O(n)
👉 Access = O(1)
빅오 표기법 관점에서의 객체 메서드
👉 Object.keys = O(n)
👉 Object.values = O(n)
👉 Object.entries = O(n)
👉 hasOwnProperty = O(1)
Array
배열은 정렬되어 있는 데이터 구조이다.
배열은 언제 사용하나?
- 데이터가 정렬되어야 할 때
- 빠른 접근, 입력, 제거를 원할 때
👉 Insertion = It depends…
👉 Removal = It depends…
👉 Searching = O(n)
👉 Access = O(1)
빅오 표기법 관점에서의 배열 메서드
배열 앞에 데이터를 추가하고 제거하면, 인덱스를 다시 설정해야 하기 때문에 비효율적이다.
push()
,pop()
작업이shift()
,unshift()
보다 빠르다. (빈 배열일 때 제외)👉 push = O(1)
👉 pop = O(1)
👉 shift = O(n)
👉 unshift= O(n)
👉 concat = O(n)
👉 slice = O(n)
👉 splice = O(n)
👉 sort = O(N * log N)
👉 forEach/map/filter/reduce/etc… = O(N)
객체나 배열을 다룰 때, 그냥 무턱대고 썼는데.. 메서드마다 성능의 차이가 있다는 거에 놀랐다!😮
메서드를 편하다고 무작정 쓰기 보단 성능도 고려해보는 습관을 들여야 할 것 같다!
728x90'컴퓨터 공학 지식 > 자료구조, 알고리즘' 카테고리의 다른 글
빈도수 세기 패턴 (0) 2023.02.15 슬라이딩 윈도우(Sliding Window) (0) 2023.02.14 투 포인터(다중 포인터) (0) 2023.02.14 단일 연결 리스트 (Singly linked list) (0) 2023.01.17 빅오 표기법(big-O notation) (0) 2022.11.18 댓글