심볼형
심볼형
JS 는 객체 프로퍼티 키로 오직 문자형과 심볼만 허용
-
심볼
유일한 식별자 만들고 싶을 때 사용
Symbol() 사용하여 만듦
심볼 이름 이라는 설명 붙이기 가능
유일성이 보장되는 자료라 설명 동일한 심볼 여러개 만들어도 각 심볼값 다름
-
심볼은 문자형으로 자동형 변환 안 됨
문자열과 심볼은 근본이 달라 서로 타입 변환되면 안 됨
반드시 문자열 출력해야 할 시 to.String() 메서드 명시적으로 호출
symbol.description 프로퍼티 사용으로 설명만 보여주기 가능
-
‘숨김’ 프로퍼티
심볼로 ‘숨김’ 프로퍼티 만들기 가능
외부 코드에서 접근 불가능하고 값도 덮어쓰기 불가능
외부 코드에 심볼 사용하여 외부 코드에서 모르게 프로퍼티 부여 가능
유일성이 보장되므로 외부에서의 충돌 없음
-
Symbols in a literal
객체 리터럴 사용해 객체 만들었을 시 대괄호 사용하여 심볼형키 만듦
-
심볼은 for…in 에서 배제
for…in 에서 심볼 접근 부락능
Object.key() 에서도 접근 불가능
외부 스크립트나 라이브러리에서 심볼 접근 불가능
Object.assign 은 제외
-
전역 심볼
이름이 같은 심볼이 같은 개체 가리키길 원하는 경우 사용
전역 심볼 레지스트리 사용하여 안에 전역 심볼 만들고 해당 심볼에 접근 시 이름이 같은 경우 항상 동일한 심볼 반환
Symbol.for(key) 사용시 이름이 key 있을 시 해당 심볼 반환, 없을 시 해당 이름의 전역 심볼 생성
-
Symbol.keyFor
해당 심볼 이름 얻을 때 사용
전역 심볼 레지스트리 뒤져서 해당 이름 얻어냄
전역 심볼 아닐 시 사용 불가능
전역 심볼 아닌 모든 심볼은 이름 얻을 수 있는 description 프로퍼티 존재
-
시스템 심볼
JS 내부에서 사용되는 심볼
객체 미세 조정 가능
요약
-
Symbol 은 객체의 유일한 식별자 만들고 싶을 때 사용
-
Symbol() 사용해서 만들며 인자에 심볼 이름(설명) 넣을 수 있음
-
유일성 보장되는 자료
-
문자형 자동 변환 안 됨
-
심볼 출력 필요할 시 .toString() 메서드 호출
-
symbol.description 프로퍼티로 설명만 보여줄 수 있음
-
‘숨김’ 프로퍼티로 만들기 가능
-
객체 리터럴 사용해 객체 만들 시 대괄호([]) 사용하여 심볼형 키 만듬
-
심볼은 for…in, Object.key() 에서 배제
-
Object.assign 은 키가 심볼인 프로퍼티 배제 하지 않으므로 접근 가능
-
전역 심볼 레지스트리 이용하여 전역 심볼 생성
-
Symbor.for(key)로 전역 심볼 만들거나 조회가능하며 이름이 key인 심볼 반환
-
Symbo.keyFor(sym) 로 전역 심볼 레지스트리 뒤져서 해당 sym(symbol) 이름 얻음 (전역 심볼 아닐 시 undefined 반환)
-
시스템 심볼로 JS 내부 객체 미세 조정 가능