본문 바로가기
개발/TTL

[JS][자바스크립트] 객체 와 원시 자료형

by ISA(류) 2021. 6. 27.

 

1. 객체 형변환 튜토리얼 - https://ko.javascript.info/object-toprimitive

 

객체를 원시형으로 변환하기

 

ko.javascript.info

 

자바스크립트에서 객체는 원시 자료형이 아니다. 그렇기에 객체를 대상으로 원시 자료형을 요구하면 객체는 자동으로 원시형으로 형변환을 하게된다. 객체의 형변환이 발생할때 해당 작업에서 요구되는 자료형을 힌트의 방식으로 결정한다.

힌트의 경우 총 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를 사용해보자

반응형