1. 객체 형변환 튜토리얼 - https://ko.javascript.info/object-toprimitive
자바스크립트에서 객체는 원시 자료형이 아니다. 그렇기에 객체를 대상으로 원시 자료형을 요구하면 객체는 자동으로 원시형으로 형변환을 하게된다. 객체의 형변환이 발생할때 해당 작업에서 요구되는 자료형을 힌트의 방식으로 결정한다.
힌트의 경우 총 3가지 있고 string, number, default가 있다. 문자열의 경우 string을 숫자의 경우 number을 hint하고 default는 그 자료형이 확실치 않을때 hint한다. 실제로 처리 과정에서 string을 제외한 number와 default 힌트는 대부분 같은 계산로직을 따르므로 실제로는 string 과 number로 나뉜다고 간단히 생각 할 수 있다.
js에서는 Symbol.toPrimitive 라는 내장 심볼(시스템심볼)로 객체 형변환을 처리한다. 또 해당 내장 심볼이 없을 경우
toString, valueOf 메서드들을 통해서 처리한다. es5에서는 심볼 자료형이 없었기에 toString과 valueOf 메서드를 통해서객체 형변환을 처리했었다는 것을 알 수 있다.
자바스크립트에서의 객체 자동형 변환을 네이티브 단계 까지 가지 않더라도 관여 할 수 있다는게 나름 재미있게 느껴진점이고, 내장 메서드들에 대한 앎이 조금 더 깊이 있는 자바스크립트 실력이 될거라 보인다.
# 사용법
1. obj[Symbol.toPrimitive] = function (hint) { return 처리로직 }
2. toString () {}, valueOf () {} 등으로 해당 obj 메서드 오버라이드를 통해서 처리로직을 추가 가능하다.
3. toPrimitive 내장 심볼의 경우 3가지 힌트를 모두 처리하고, string힌트는 toString을 그외는 valueOf를 우선한다.
# 결론
obj.toString()만 사용해도 '모든 변환’을 다 다룰 수 있기 때문에, 실무에선 obj.toString()만 구현해도 충분한 경우가 많다.
반환 값도 ‘사람이 읽고 이해할 수 있는’ 형식이기에 실용적이고 obj.toString()은 로깅이나 디버깅 목적으로도 자주 사용된다.
그리고 복잡한 형변환을 구현 할 것이라면 Symbol.toPrimitive를 사용해보자
'개발 > TTL' 카테고리의 다른 글
[JS][자바스크립트] N진수변환 (0) | 2021.07.23 |
---|---|
[JS][자바스크립트]워크맵과 워크셋 (0) | 2021.07.05 |
[JS][자바스크립트]맵과 셋 (0) | 2021.07.01 |
[JS][자바스크립트] iterable 객체 (0) | 2021.06.30 |
[JS][자바스크립트] 심볼 (0) | 2021.06.27 |