섹션 3. 배열과 오브젝트의 성능 평가

이유정·2022년 12월 18일
0

섹션 소개

가장 기본적인 자바스크립트에 대해서 이야기해보자.
Arrays, Objects, 내장된 메소드와 loops들, 얼마나 성능이 좋은가?

객체의 빅오

Objects

빅오와 성능 관점에서 보겠다.

let instructor = {
	firstName : "Kelly", 
  	isInstructor : true, 
  	favoriteNumbers : [1,2,3,4]
}

우리는 언제 객체를 사용하는가?

  • 정렬하고 싶지 않을 때
  • 빠른 접근이 필요할 때 (삽입, 삭제)
    : 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)

요약하자면,

  • 객체는 모든 것을 빨리 처리한다. 그러나 정렬되어 있지는 않는다.
  • 객체는 간단하다. 어떠한 상황에도 작동하고 , key : value가 모두 있고,
  • 모든 연산, 입력, 접근, 업데이트, 제거 모두 상수 시간이다.
  • 탐색은 희귀하지만, O(N)은 N에 따라서 자라기 때문에 선형시간이다.
  • 객체가 커질수록, 객체 안에 저장되어 있던 데이터를 다루는 keys, values, entries와 같은 메소드들도 있다.
    배열이 빠를수도 있지만 정렬되어 있어서 작업에 따라 느릴 수 있다.

배열 안의 데이터에 접근이 느린 이유

빅오를 통해 배열을 판단해보고 객체와 비교했을 때 성능이 어떤지 보자.

let names = ["유정", "민수", "지현"]; 
let values = [true, {}, [], 2, "awes ome"]; 

우리는 언제 배열을 사용하는가?

  • 정렬이 필요할 때
  • 성능을 희생해야 할 수 있다. (특히 입력과 제거를 할 때)
  • 배열에 있는 데이터를 접근하는 것은 매우 빠르다.
    : Insertion - it depends...
    => 어디에 입력을 하는지에 달려있다.
    => 배열 앞에 추가(제거)하면 인덱스를 모두 새롭게 추가해야 한다. (O(N))
    : Removal - it depends...
    : Searching - O(N)
    : Access - O(1)

빅오 배열 메소드

배열 내장 메소드

  • push / pop : 0(1)
  • shift / unshift : O(N)
  • concat : O(N)
  • slice : O(N)
  • splice : O(N)
  • sort : O(N * logN) //배열을 정렬하는 것은 O(N)보다 더 크다
  • forEach/ map/ filter/ reduce/ ete. : O(N)
profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글