# storage

window객체에 localStorage, sessionStorage 라는 두개의 key value 저장소가 있다.

react-native(이하 rn)의 AsyncStorage와 같은 인터페이스이다. (사용방법이 같다. 리턴은 조금 다르지만)

value에는 문자열이나 숫자가 들어갈수있다(숫자도 문자열로 자동변환됨 => getItem하면 문자열로 리턴)

이때 object를 저장하고싶다면 value에 object를

JSON.stringify(object)

이런식으로 문자열로 변환하여 넣고,

getItem할때

JSON.parse(localStorage.getItem('someKey'))

해서 사용하면된다.

사용자에 하드디스크에 저장되므로 탭을 여러개 띄워도 공유가 가능하다.

당연히 브라우저나 컴퓨터를 종료했다가 다시 실행해도 값이 남아있다.

하지만 브라우저끼리의 호환은 안된다.

sessionStorage은 페이지세션이 종료되면 사라진다.

(해당 탭 종료하거나.. 탭을 여러개 띄워놓고 공유가 안됨. 각각의 세션 스토리지가 생김)

localStorage.setItem('boseok', 'boseok`s message!!!') 

console.log(localStorage.getItem('boseok')) //boseok's message!!!

위와같은 결과를 얻을수있다

rn에서는 getItem과 setItem이 Promise를 리턴한다. (비동기)

하지만 js의 window객체- 에서는 동기적으로 리턴한다

정리-

localStorage, sessionStorage 키값 저장소가 있음.

같은 인터페이스임 - 사용법(메소드)이 같음

비동기api가 아니라서 큰 값 저장하기에는 무리가 있음 - blocking

큰 값을 저장하고 싶다면 indexedDB등의 DB를 사용

getItem(문자열키)

setItem(문자열키, 저장할문자열값)

그외의 메소드들

removeItem(key) => 아이템 한개 삭제

clear(key) => this storage 모두 삭제