Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript Symbol.toStringTag 심볼 완벽 정리 – 객체의 문자열 태그 커스터마이징 방법

JavaScript의 Symbol.toStringTag는 가장 널리 알려진 내장 심볼(well-known symbol) 중 하나입니다. 이 심볼은 문자열 값을 가지는 프로퍼티로, 객체가 생성되는 시점에 해당 객체에 대한 설명(문자열 태그)을 지정하는 역할을 합니다.

Object.prototype.toString() 메서드는 내부적으로 이 심볼의 값을 참조하여 “[object 태그명]” 형태의 문자열을 반환합니다. 일반 객체는 기본적으로 “[object Object]”를 반환하지만, 클래스나 객체에 Symbol.toStringTag 게터(getter)를 직접 정의하면 출력되는 문자열을 자유롭게 변경할 수 있습니다.

주요 내장 객체의 기본 toStringTag 값

  • 배열(Array) → “Array”
  • Map → “Map”
  • Set → “Set”
  • Promise → “Promise”
  • 일반 객체 → “Object”

다음은 Symbol.toStringTag 심볼을 활용한 예제 코드입니다 −

예제

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    div {
        font-size: 20px;
        font-weight: 500;
    }
</style>
</head>
<body>
<h1>JavaScript Symbol.toStringTag 심볼</h1>
<div class="sample"></div>
<button class="Btn">클릭하세요</button>
<h3>
위 버튼을 클릭하면 각 객체의 문자열 설명을 확인할 수 있습니다
</h3>
<script>
    let fillEle = document.querySelector(".sample");
    class testClass {
        get [Symbol.toStringTag]() {
            return 'Testing';
        }
    }
    class helloClass {
        get [Symbol.toStringTag]() {
            return 'Hello World';
        }
    }
    let test = new testClass();
    let hello = new helloClass();
    document.querySelector(".Btn").addEventListener("click", () => {
        fillEle.innerHTML += 'testClass = ' + test.toString() + "<br>";
        fillEle.innerHTML += 'helloClas = ' + hello.toString() + "<br>";
    });
</script>
</body>
</html>

출력 결과

JavaScript Symbol.toStringTag 심볼 완벽 정리 – 객체의 문자열 태그 커스터마이징 방법

“클릭하세요(CLICK HERE)” 버튼을 클릭하면 −

JavaScript Symbol.toStringTag 심볼 완벽 정리 – 객체의 문자열 태그 커스터마이징 방법

버튼을 클릭하면 testClass 인스턴스는 “[object Testing]”, helloClass 인스턴스는 “[object Hello World]”라는 문자열이 화면에 표시됩니다. 이처럼 각 클래스에서 정의한 Symbol.toStringTag 반환값이 toString() 호출 결과에 그대로 반영되는 것을 확인할 수 있습니다.

정리

Symbol.toStringTag는 객체의 기본 문자열 표현을 세밀하게 제어하고 싶을 때 유용한 심볼입니다. 특히 디버깅, 로깅, 라이브러리 개발 시 객체의 종류를 명확하게 구분해야 하는 상황에서 Object.prototype.toString.call(obj)와 함께 활용하면 매우 효과적입니다.