배열과 오브젝트의 성능 평가

여민수·2022년 8월 22일
0
post-thumbnail

객체의 Big O

let instructor = {
	firstName: "Kelly",
	isInstructor: true,
	favoriteNumbers: [1, 2, 3, 4],
}
  • 이 객체 리터럴에는 instructor라는 변수에 key, value를 3개 저장하고 있음
  • 객체의 사용
    • 객체는 정렬할 필요가 없을 때 사용
    • 빠른 접근 / 삽입 / 삭제를 요구할 때 용이함
    • 이 때 빠르다는 의미는 입력, 삭제, 접근 시간이 상수 시간(O(1)O(1))이라는 의미
    • 단, 객체 내 프로퍼티에 관한 값을 찾기 위한 탐색을 할 땐 O(N)O(N)의 복잡도를 가짐
  • 객체 메소드들의 Big O
    • Object.keys - O(N)O(N)
    • Object.values - O(N)O(N)
    • Object.entries - O(N)O(N)
    • hasOwnProperty - O(1)O(1)

배열의 Big O

let names = ['Michael', 'Melissa', 'Andrea'];
let values = [true, {}, [], 2, 'awesome'];
  • 배열의 사용
    • 배열은 대부분 정렬되어 있는 데이터를 위해 사용함
    • 배열은 빠른 접근(O(1)O(1))이 가능
    • 배열 내 요소들을 탐색할 때는 O(N)O(N)의 복잡도를 가짐
    • 단 배열의 삽입, 삭제는 배열의 위치에 따라 달라짐
      • 배열의 삽입, 삭제
        • 배열의 끝에 삽입, 삭제한다면(arr.push()) O(1)O(1)의 복잡도를 가짐
        • 배열의 앞에 삽입, 삭제한다면?
          • 배열 내 기존 요소들의 index가 모두 달라짐 → 모든 요소들의 인덱스를 새로 배정해야 함!
          • O(N)O(N)만큼의 복잡도를 가짐
  • 배열 메소드들의 Big O
    • Array.push(), Array.pop() - O(1)O(1)
    • Array.shift(), Array.unshift() - O(N)O(N)
    • Array.concat() - O(N)O(N)
    • Array.slice() - O(N)O(N)
    • Array.splice() - O(N)O(N)
    • Array.sort() - O(NlogN)O(N * logN)
    • Array.forEach(), map(), filter(), reduce() etc… - O(N)O(N)
profile
FE develop을 하고 싶은 대학생

0개의 댓글