데이터 타입

원시타입과 참조형 타입

원시타입

원시타입: Primitive Data Type
원시타입에는 Number, Boolean, String, Symbol, null, undefined 가 있다.
원시타입은 변수에 값 자체가 저장된다.

참조타입

참조타입: Reference Data Type
참조타입에는 Array, Object가 있다.
참조타입은 변수에 값이 저장되는 것이 아니라, 값이 저장된 메모리 주소를 참조하고 있다. 즉 값이 저장된 공간은 따로있고 변수에는 이 메모리 주소를 가지고 있는것. 자바스크립트는 메모리 위치에 직접 접근하는 것을 허용하지 않으므로 객체의 메모리 공간을 직접 조작하는 일이 불가능하다. 만약 객체를 조작한다면 객체 자체가 아니라 해당 객체에 대한 참조를 조작하는 것이다.

Map

맵이란 객체와 비슷하게 키 데이터 항목들의 모음이다. 맵과 객체의 가장 큰 차이점은 맵의 키는 어떠한 타입이든 허용한다.

맵의 메소드들

  • new Map() - 새로 맵을 만듬 인스턴스화
  • map.set(key, value) - 키와 값을 저장한다.
  • map.get(key) - 키의 값을 반환한다. 키가 존재하지 않다면 undefined를 반환한다.
  • map.has(key) - 키가 존재한다면 true를 반환하고 존재하지 않다면 false를 반환한다.
  • map.delete(key) - 해당 키에대한 값을 지운다.
  • map.clear() - 맵의 모든것을 지운다.
  • map.size - 현재 요소들의 개수를 반환한다.
let map = new Map()
map.set('1', '안녕하세용')
map.get('1') // "안녕하세용"
map.set(true, '재영이')
map.get(true) //"재영이"
map.size // 2

주의할점

map[key] 이렇게 접근하는것은 올바른 접근방식이 아니다. 이렇게 써도 작동은 하지만 이 경우 순수한 자바스크립트 객체로 취급하기 때문이다. 따라서 맵을 사용하려면 set, get 을 사용해야한다.

map
  .set('1', 'str1')
  .set(1, 'num1')
  .set(true, 'bool1')

맵 메소드 체이닝

맵의 반복

맵의 반복과 관련하여 3가지 메소드가 있다. 기본적으로 for..of 로 사용된다.

  • map.keys() - 반복한 키를 반환한다.
  • map.values() - 반복한 값을 반환한다.
  • map.entries() - 반복한 [키, 밸류] 를 반환한다.
let recipeMap = new Map([
  ['cucumber', 500],
  ['tomatoes', 350],
  ['onion', 50],
])

for (let vegetable of recipeMap.keys()) {
  console.log(vegetable) // cucumber, tomatoes, onion
}

for (let entry of recipeMap) {
  //  recipeMap.entries() 와 같다
  console.log(entry) // (2) ["cucumber", 500]["tomatoes", 350]["onion", 50]
}

Set

set는 특별한타입의 모음. 키가 존재하지않고 각각의 값들은 한번만 들어갈 수 있다. 즉 중복이 안된다.

세트의 메소드들

  • new Set (iterable) - 새로운 세트를 만든다. 만약 배열같은 반복가능한 값이 들어오면 값을 카피해서 세트로 넣는다.
  • set.add(value) - 값을 넣는다. 세트 스스로 리턴한다.
  • set.delete(value) - 값을 지운다. 특정 값을 넣었을때 값이 존재하면 true를 리턴하고 그렇지않다면 false를 리턴한다.
  • set.has(value) - 값이 존재한다면 true 아니라면 false리턴
  • set.clear() - 세트의 모든것을 지운다.
  • set.size - 요소들의 갯수를 센다.
let set = new Set()
let jy = { name: '재영' }
let koko = { name: '코코' }
let popo = { name: '포포' }

set.add(jy)
set.add(koko)
set.add(popo)
set.add(jy)
set.add(popo)

console.log(set.size) // 3
for (let who of set) {
  console.log(who.name) // 재영 . 코코. 포포
}

세트는 배열이 될 수 있어 arr.find를 사용하여 중복을 확인할 수 있으나 배열의 모든 전체 요소를 검사하므로 성능이떨어진다. set 내부적으로 최적화 되어있다.

세트의 반복

세트의 반복 또한 맵의 반복과 비슷하다.

  • set.keys() - 반복한 값을 반환한다.
  • set.values() - 반복한 값을 반환한다. set.keys와 같은데 맵과의 호환성을 위해 있다고한다.
  • set.entries() - 반복한 [밸류, 밸류] 를 반환한다. ?

맵은 객체와 비슷하고 세트는 배열과 비슷하나 다른 특징을 가졌다.


Written by@jaeyoung-son
배운것을 기록하는 공간입니다.

GitHub