[TIL] 8/10

예도리·2021년 8월 15일
0
post-thumbnail

바보가 임시저장해놓고,,, 출간을 안했었다,,,ㅋㅋㅋㅋㅋㅋ

✏️ 오늘 공부한 것

어제 분명히 이터러블, 이터레이터에 대해서 자세하게 공부해보려고 했는데 일급 객체,함수랑 클로저 찾아보다가 못했다,, 오늘의 목표는 이터러블, 이터레이터, 제너레이터 확실하게 이해하기!!! -> 다음 TIL에서 다시 정리했다!

원시 타입과 불변성

이건 Symbol에 대해 검색했다가 찾게된 내용이다. 원시 타입이란 객체가 아니면서 메서드도 가지지 않는 데이터를 말한다. String, Number, Boolean, undefined, null 그리고 Symbol이 여기에 속한다. 모든 원시 타입은 Immutable value이다. 헷갈리지 말아야할 것은 원시값과 원시값이 할당된 변수는 별개이다. 해당 변수에 새로운 값을 다시 할당할 수는 있다.

var hi = "Hello";
hi = "Bye";

첫번째 구문이 실행되면 메모리에 문자열 "Hello"가 생성되고 식별자 hi는 "Hello"의 메모리 주소를 가리킨다. 두번째 구문이 실행되면 해당 주소에 있는 "Hello"가 "Bye"로 변경되는 것이 아니라, 새로운 메모리 공간에 "Bye"가 생성되고 hi가 가리키는 주소가 "Hello"에서 "Bye"의 메모리 주소로 바뀌는 것 뿐이다. "Hello"는 없어지지 않고 메모리 공간에 그대로 존재한다!
원시 타입 이외의 모든 값은 Object 객체 타입으로 Mutable value, 즉 변경 가능하다!

Symbol

ES6에 새로 도입된 원시 타입이다. 객체에 unique한 프로퍼티를 만들기 위해 필요하다. Symbol을 생성함으로써 다른 라이브러리의 프로퍼티와의 충돌을 피할 수 있다.

생성

Symbol() 함수로 Symbol이 생성된다. 문자열을 인자로 전달할 수 있는데 생성되는 Symbol의 설명으로 디버깅 용도로만 사용된다.

사용

원래 객체의 속성 키는 문자열로 만들 수 있었지만, Symbol 값도 속성 키로 사용할 수 있게 됐다. Symbol 값은 unique한 값이라서 다른 프로퍼티와 충돌을 피할 수 있다.

Symbol 객체

Symbol() 함수로 생성된 Symbol은 함수 객체이다. Symbol의 속성 중에 length와 prototype을 제외한 속성을 well-known Symbol이라 부른다.

Symbol.iterator

well-known Symbol은 자바스크립트 엔진에 상수로 존재하며 자바스크립트 엔진은 well-known symbol을 참조해 일정한 처리를 한다.
어떤 객체가 Symbol.iterator를 속성 키로 사용한 메서드를 가지고 있으면 자바스크립트 엔진은 이 객체가 이터레이션 프로토콜을 따르는 것으로 간주하고 이터레이터로 동작하도록 한다.
위에 해당하는 객체, 즉 빌트인 객체(빌트인 잍터러블)은 Array, String, Map, Set, DOM data structures, arguments가 있다.

마무리

이터러블로 가는 길에 Symbol을 만나버려서 궁금함을 참지 못하고 검색해봤다. Symbol이 새로 생긴 원시 타입이라니~~! 불변성도 들어는 봤지만 원시 타입이 불변하고, 원시 타입이 아닌 것은 불변하지 않다는 건 처음 알았다. 뭔가 자바스크립트에 대해 제대로 알고 있던 것이 하나도 없는 것 같은 느낌이다 ㅋㅋㅋㅋㅋ,,,
이런 식으로라도 제대로 알아가서 다행이다,,

출처

0개의 댓글