안녕하세요.
디자인도 하고, 개발자도 하는 '디발자 뚝딱'입니다.
이번 포스팅에서는
자바스크립트로 개발할 때 사용하는 Map과 Set에 대해 공유하겠습니다.
지금부터 가독성을 위해 문어체로 작성할게요!
Map / Set
- 객체는 property name을 통해 이름이 있는 여러 값들을 묶을 때 활용할 수 있다. - Map과 비슷
- 배열은 index를 통해 순서가 있는 여러 값들을 묶을 때 활용할 수 있다. - Set과 비슷
Map
- 이름이 있는 데이터를 저장한다는 점에서 객체와 비슷하다.
일반 객체는 할당연산자를 통해 값을 추가하고 점 표기법이나 대괄호 표기법으로 접근하지만,
Map은 메소드를 통해서 값을 추가하거나 접근한다. - 문자열과 심볼 값만 key(프로퍼티 네임)로 사용할 수 있는 일반 객체와는 다르게,
Map 객체는 메소드를 통해 값을 다루기 때문에, 다양한 자료형을 key로 활용할 수 있다는 장점이 있다. - new 키워드를 통해서 Map을 만들 수 있다.
- 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 안의 모든 요소를 제거하는 메소드. - map.size
요소의 개수를 반환하는 프로퍼티. (메소드가 아닌 점 주의! 배열의 length 프로퍼티와 같은 역할)
// Map 생성
const codeit = new Map();
// set 메소드
codeit.set('title', '문자열 key');
codeit.set(2017, '숫자형 key');
codeit.set(true, '불린형 key');
// get 메소드
console.log(codeit.get(2017)); // 숫자형 key
console.log(codeit.get(true)); // 불린형 key
console.log(codeit.get('title')); // 문자열 key
// has 메소드
console.log(codeit.has('title')); // true
console.log(codeit.has('name')); // false
// size 프로퍼티
console.log(codeit.size); // 3
// delete 메소드
codeit.delete(true);
console.log(codeit.get(true)); // undefined
console.log(codeit.size); // 2
// clear 메소드
codeit.clear();
console.log(codeit.get(2017)); // undefined
console.log(codeit.size); // 0
set
- 여러 개의 값을 순서대로 저장한다는 점에서 배열과 비슷하지만,
배열의 메소드는 활용할 수 없고 Map과 비슷하게 Set만의 메소드를 통해서 값을 다뤄야 한다. - Map과 마찬가지로 new 키워드로 Set을 만들수 있다.
- Set안의 여러 값을 다루는 메소드
- set.add(value)
값을 추가하는 메소드. (메소드를 호출한 자리에는 추가된 값을 가진 Set 자신을 반환한다.) - set.has(value)
Set 안에 값이 존재하면 true, 아니면 false를 반환한다. - set.delete(value)
값을 제거하는 메소드.
메소드를 호출한 자리에는 Set 내에 값이 있어서 제거에 성공하면 true, 아니면 false를 반환한다. - set.clear()
Set 안의 모든 요소를 제거하는 메소드. - set.size
요소의 개수를 반환하는 프로퍼티. (메소드가 아닌 점 주의! 배열의 length 프로퍼티와 같은 역할)
// Set 생성
const members = new Set();
// add 메소드
members.add('영훈'); // Set(1) {"영훈"}
members.add('윤수'); // Set(2) {"영훈", "윤수"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
// has 메소드
console.log(members.has('동욱')); // true
console.log(members.has('현승')); // false
// size 프로퍼티
console.log(members.size); // 4
// delete 메소드
members.delete('종훈'); // false
console.log(members.size); // 4
members.delete('태호'); // true
console.log(members.size); // 3
// clear 메소드
members.clear();
console.log(members.size); // 0
Set은 개별 값에 바로 접근하는 방법이 없다.
일반 객체는 프로퍼티 네임으로, Map은 get메소드로, 그리고 배열은 index를 통해서 개별 값에 접근하지만, Set은 없다.
// Set 생성
const members = new Set();
// add 메소드
members.add('영훈'); // Set(1) {"영훈"}
members.add('윤수'); // Set(2) {"영훈", "윤수"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
for (const member of members) {
console.log(member); // 영훈, 윤수, 동욱, 태호가 순서대로 한 줄 씩 콘솔에 출력됨.
}
Set이 유용하게 사용되는 경우 : 중복을 허용하지 않는 값들을 모을 때
최초에 추가된 순서를 유지하면서, 나중에 중복된 값을 추가하려고 하면 그 값은 무시하는 특징이 있다.
/ Set 생성
const members = new Set();
// add 메소드
members.add('영훈'); // Set(1) {"영훈"}
members.add('윤수'); // Set(2) {"영훈", "윤수"}
members.add('영훈'); // Set(2) {"영훈", "윤수"}
members.add('영훈'); // Set(2) {"영훈", "윤수"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('동욱'); // Set(3) {"영훈", "윤수", "동욱"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
members.add('동욱'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
members.add('태호'); // Set(4) {"영훈", "윤수", "동욱", "태호"}
처음 Set을 생성할 때 아규먼트로 배열을 전달할 수 있다.
배열 내에서 중복을 제거한 값들의 묶음을 만들때 Set을 활용한다.
const numbers = [1, 3, 4, 3, 3, 3, 2, 1, 1, 1, 5, 5, 3, 2, 1, 4];
const uniqNumbers = new Set(numbers);
console.log(uniqNumbers); // Set(5) {1, 3, 4, 2, 5}
728x90
'코딩도 합니다 > JS' 카테고리의 다른 글
[자바스크립트 js] 모듈 문법 / as 키워드 / * 와일드 카드 문자 / imprt 키워드 / export 키워드 / default export / named export (0) | 2021.06.19 |
---|---|
[자바스크립트 js] 모듈 개념 (0) | 2021.06.16 |
[자바스크립트 js] sort 메소드 / reverse 메소드 (0) | 2021.06.16 |
[자바스크립트 js] 배열 메소드 / reduce (0) | 2021.06.16 |
[자바스크립트 js] AJAX / JSON / Object to JSON / JSON to Object (0) | 2021.06.15 |