Map vs Object

    

JavaScript의 `Object`와 `Map`은 둘 다 키-값 쌍을 저장하는 자료구조이지만, 몇 가지 중요한 차이점이 있습니다.


### Object

- **키 타입**: 문자열 또는 심볼만 키로 사용할 수 있습니다.

- **순서**: 키의 순서는 삽입 순서를 보장하지 않습니다.

- **성능**: 주로 간단한 구조의 데이터를 저장할 때 사용됩니다.

- **기본 메서드**: `hasOwnProperty`와 같은 기본 메서드를 가지고 있습니다.


### Map

- **키 타입**: 모든 값을 키로 사용할 수 있습니다 (객체 포함).

- **순서**: 삽입된 순서를 보장합니다.

- **성능**: 대량의 데이터 및 빈번한 삽입/삭제에 더 최적화되어 있습니다.

- **메서드**: `size`, `set`, `get`, `delete`, `has` 등 다양한 메서드를 제공합니다.


### 예제

#### Object

```javascript

let obj = {};

obj['key'] = 'value';

console.log(obj['key']); // "value"

```


#### Map

```javascript

let map = new Map();

map.set('key', 'value');

console.log(map.get('key')); // "value"

```


### 요약

- `Object`는 문자열/심볼 키, 삽입 순서 비보장, 간단한 데이터 저장에 적합.

- `Map`은 모든 키 타입, 삽입 순서 보장, 대량 데이터/빈번한 삽입/삭제에 적합. 



### `Map` 메서드


1. **`set`**: 키-값 쌍을 추가하거나 업데이트합니다.

   ```javascript

   let map = new Map();

   map.set('key1', 'value1');

   ```


2. **`get`**: 키에 해당하는 값을 반환합니다.

   ```javascript

   let value = map.get('key1'); // 'value1'

   ```


3. **`delete`**: 특정 키-값 쌍을 제거합니다.

   ```javascript

   map.delete('key1');

   ```


4. **`has`**: 특정 키가 존재하는지 확인합니다.

   ```javascript

   let hasKey = map.has('key1'); // false

   ```


5. **`size`**: 맵의 요소 개수를 반환합니다.

   ```javascript

   let size = map.size; // 0

   ```


6. **`clear`**: 모든 요소를 제거합니다.

   ```javascript

   map.clear();

   ```


7. **`keys`**: 모든 키를 반환합니다.

   ```javascript

   for (let key of map.keys()) {

       console.log(key);

   }

   ```


8. **`values`**: 모든 값을 반환합니다.

   ```javascript

   for (let value of map.values()) {

       console.log(value);

   }

   ```


9. **`entries`**: 모든 [키, 값] 쌍을 반환합니다.

   ```javascript

   for (let [key, value] of map.entries()) {

       console.log(key, value);

   }

   ```


### `Object` 메서드


1. **프로퍼티 접근 및 설정**: 점 표기법과 대괄호 표기법을 사용합니다.

   ```javascript

   let obj = {};

   obj['key1'] = 'value1';

   let value = obj.key1; // 'value1'

   ```


2. **`delete`**: 특정 프로퍼티를 제거합니다.

   ```javascript

   delete obj.key1;

   ```


3. **`hasOwnProperty`**: 객체가 특정 프로퍼티를 가지고 있는지 확인합니다.

   ```javascript

   let hasKey = obj.hasOwnProperty('key1'); // false

   ```


4. **`Object.keys`**: 객체의 모든 키를 배열로 반환합니다.

   ```javascript

   let keys = Object.keys(obj); // ['key1']

   ```


5. **`Object.values`**: 객체의 모든 값을 배열로 반환합니다.

   ```javascript

   let values = Object.values(obj); // ['value1']

   ```


6. **`Object.entries`**: 객체의 키-값 쌍을 [키, 값] 형태의 배열로 반환합니다.

   ```javascript

   let entries = Object.entries(obj); // [['key1', 'value1']]

   ```


7. **`Object.assign`**: 하나 이상의 소스 객체로부터 대상 객체로 속성을 복사합니다.

   ```javascript

   let target = { a: 1 };

   let source = { b: 2 };

   Object.assign(target, source); // { a: 1, b: 2 }

   ```


8. **`Object.freeze`**: 객체를 동결하여 수정할 수 없게 합니다.

   ```javascript

   let obj = { prop: 42 };

   Object.freeze(obj);

   obj.prop = 33; // Error in strict mode

   ```


9. **`Object.seal`**: 객체를 봉인하여 기존 속성을 수정할 수 있지만 새 속성을 추가할 수 없게 합니다.

   ```javascript

   let obj = { prop: 42 };

   Object.seal(obj);

   obj.prop = 33; // Success

   obj.newProp = 24; // Error

   ```

댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet