Lv1_junior_dev
자라나라실력실력
Lv1_junior_dev
전체 방문자
오늘
어제

주인장 GitHub 바로가기

    • 분류 전체보기 (112)
      • 주절주절 (6)
      • 프로젝트 회고록 (3)
      • 꿀팁 (3)
      • 알고리즘 풀이 (26)
      • 이것 저것 (2)
      • 자바스크립트 - Vanilla JS (25)
      • 자바스크립트 - React.js (37)
      • 자바스크립트 - Next.js (4)
      • 자바스크립트 - TypeScript (5)
      • HTML (0)
      • CSS (1)

    인기 글

    hELLO · Designed By 정상우.
    Lv1_junior_dev

    자라나라실력실력

    [자바스크립트 / Vanilla JS] Object 와 Map
    자바스크립트 - Vanilla JS

    [자바스크립트 / Vanilla JS] Object 와 Map

    2022. 6. 17. 12:42

     

     

     

    Object와 Map의 특징 및 사용 용도

     

    전통적으로 objects 는 문자열을 값에 매핑하는 데 사용되었다. Object는 키를 값으로 설정하고, 값을 검색하고, 키를 삭제하고, 키에 저장된 내용을 검색 할 수 있게 만들어준다. 그러나 Map 객체는 더 나은 맵이 되도록 하는 몇 가지 장점을 가지고 있다.

     

    • Object의 key는 String 또는 Symbol이어야 하고, Map의 키는 모든 값을 가질 수 있다.
    • Object는 크기를 수동으로 추적해야하지만, Map은 크기를 쉽게 얻을 수 있다.
    • Map은 삽입된 순서대로 순번이 매겨진다 -> iterable하다. ==> for of와 forEach, for in 사용 가능
    • Object는 데이터들의 순서가 없기 때문에 순서를 정렬하기 위한 과정이 필요하다. ==> for in만 사용 가능

    Object

    • key-value로 저장한다.
    • key를 주로 property라고 부른다.
    • key는 unique하지만 value는 unique하지 않다.
    • 프로퍼티의 값으로 함수가 올 수도 있는데, 이러한 프로퍼티를 메소드(method)라고 합니다.

     

    * 기본 문법

    let cat = "고양이"; // 일반적인 변수의 선언
    
    let Man = { name: "KimJiWoo", age: 27};
    
    cat          // 고양이
    Man.name   // KimJiWoo
    Man.age    // 27

     

    * 객체의 메소드와 프로퍼티 참조

    let Man = {
    
        name: "JiWoo",      // 이름 프로퍼티를 정의함.
        birthday: "960509",  // 생년월일 프로퍼티를 정의함.
        info: function() { // name과 birthday를 합쳐서 주민등록번호를 반환함.
            return "이름 : this.name + "생년월일 : " + this.birthday;
        }
    };
    
    Man.name    // JiWoo
    
    Man["name"] // JiWoo
    
    Man.info() // 이름 : JiWoo 생년월일 : 960509
    
    Man.info;  // function () { return "이름 : this.name + "생년월일 : " + this.birthday; }

     

    Map

    • key-value 쌍으로 저장되는 형식이다.
    • key는 각 데이터가 unique하기때문에 중복이 없다.
    • Map 객체는 키-값을 저장한다.
    • key는 자료형을 구분한다.
    • 배열을 넣어서 초기화 시킬 수 도 있다.
    let TestMap = new Map(); //{}
    TestMap.set(1, 'Test'); //{1=>'Test'}
    TestMap.set('1', 'Test'); //{1=>'Test', '1'=>'Test'} String / Num
    TestMap.set(1, 'Second'); //{1=>'Second', '1'=>'hello'} => 중복 시 이 전 데이터에 덮어쓰기
    TestMap.get(1); //'Second'
    TestMap.has(1); //true
    TestMap.delete(1); // {'1' => 'hello'} => 제일 앞 데이터를 삭제
    
    let TestMap = new Map(['name', 'Jiwoo'], ['age', '27']); //{"name" => "Jiwoo", "age" => "27"}

    Map.prototype.entries()

    Map객체에 각 요소에 해당하는 키,값 쌍을 Map에 등록한 순서대로 포함한 새로운 Iterator 객체를 반환한다.

    entries()를 사용해 for of문으로 쉽게 키,값 에 접근할 수 있다.

    const Test_map = new Map();
    
    Test_map.set('0', 'Kim');
    Test_map.set(1, 'Jiwoo');
    
    const Test_iterator = Test_map.entries(); // {"0" => "Kim", 1 => "Jiwoo"}
    
    console.log(Test_map); // Map { '0' => 'Kim', 1 => 'Jiwoo' }
    console.log(Test_iterator.next().value); //['0', 'Kim']
    console.log(Test_iterator.next().value); //[1, 'bar']
    console.log(Test_iterator.next().value); //undefined
    
    for (let x of Test_map.entries()) {
      console.log(x);
    }
    //[ '0', 'Kim' ]
    //[ 1, 'Jiwoo' ]

    맵 주요 메서드와 프로퍼티

    • new Map()
      • 맵을 만든다.
    • map.set(key, value)
      • key를 이용해 value를 저장한다.
    • map.get(key)
      • ``key`에 해당하는 값을 반환한다.
      • key가 존재하지 않으면 undefined를 반환
    • map.has(key)
      • key가 존재하면 true, 존재하지 않으면 false를 반환
    • map.delete(key)
      • key에 해당하는 값을 삭제
    • map.clear()
      • 맵 안의 모든 요소를 제거
    • map.size
      • 요소의 개수를 반환

     


     

    Object와 Map 각각의 사용 용도

     

    Object

    • 데이터를 저장하기 위한 간단한 구조이며, Key가 String이거나 integer(또는 Symbol)인 경우 : Map을 생성하는 것보다 기본 오브젝트를 생성하는 데 훨씬 적은 시간이 걸리기 때문.
    • 각각의 property/element가 별도의 로직이 적용되어야 하는 경우 
    • JSON으로/에서 변환해야 하는 경우(Map은 현재 지원하지 않음)

    Map

    • 키의 추가/삭제가 빈번한 경우 : Map은 순수한 Hash이고, Object는 그보다 복잡하기 때문에 속도가 Map이 더 뛰어남. 또한 Object property를 삭제하는 delete 연산은 몇 가지 성능 이슈가 존재함
    • 키의 순서가 보장되어야 할 때 : Map은 iteration 기반으로 만들어졌기 때문에 기본적으로 순서를 유지
    • 데이터의 크기가 클 때 : 더 나은 성능을 보임
    • 런타임 시점까지 key가 정해지지 않은 경우 
    • key와 value가 각각 같은 타입일 경우 

    출처: 

    https://kellis.tistory.com/129

    https://velog.io/@proshy/JSSet-Map-Object-정리

    http://www.tcpschool.com/javascript/js_object_concept

     

     

    '자바스크립트 - Vanilla JS' 카테고리의 다른 글

    [자바스크립트 / Vanilla JS] 비공개 멤버  (0) 2022.07.04
    [자바스크립트 / Vanilla JS] if(조건문) 줄이기  (1) 2022.06.24
    [자바스크립트 / Vanilla JS] ES6 템플릿 리터럴 (Template Literal)  (0) 2022.06.21
    [자바스크립트 / Vanilla JS] 반복문에 대하여 (for.. for in.. for of.. forEach)  (0) 2022.06.20
    [자바스크립트 / Vanilla JS] 변수를 선언해주는 var, let, const에 대하여  (0) 2022.06.18
      '자바스크립트 - Vanilla JS' 카테고리의 다른 글
      • [자바스크립트 / Vanilla JS] if(조건문) 줄이기
      • [자바스크립트 / Vanilla JS] ES6 템플릿 리터럴 (Template Literal)
      • [자바스크립트 / Vanilla JS] 반복문에 대하여 (for.. for in.. for of.. forEach)
      • [자바스크립트 / Vanilla JS] 변수를 선언해주는 var, let, const에 대하여
      Lv1_junior_dev
      Lv1_junior_dev
      나는 성장이 고프다. 자라나라 개발 실력 !

      티스토리툴바