본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 75일차 -112

by oncerun 2020. 7. 1.
반응형

ES6

 

1. Symbol이란?

1997년 자바스크립트가 ECMAScript로 처음 표준화된 이래로 자바스크립트는 6개의 타입을 가지고 있었다.

  • 원시 타입 (primitive data type)
    • Boolean
    • null
    • undefined
    • Number
    • String
  • 객체 타입 (Object type)
    • Object

심벌(symbol)은 ES6에서 새롭게 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다.

심벌은 주로 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.

 

 

 

심벌 생성

 

심벌을 생성하기 위해서는 Symbol()를 사용한다.

//s1은 유일한 프로퍼티의 key이다.
let s1 = Symbol();

 

심벌을 사용하기 위해 두 개의 객체를 만들어 보자.

 

let exam = {

    kor: 10,
    eng: 20,
    total: () => {
        return this.kor + this.eng;
    }

};


let obj1 = {

    name: 'dragon',
    total: () => {
        return console.log("아무것도안함");
    }

};

let ar = [exam, obj1];

for (let i = 0; i < 2; i++) {

    console.log(typeof ar[i].total);

}

 

만약 두개의 total이 동일한 기능을 했으면 좋겠다면 심벌을 구현한다.

Symbol 값도 객체의 프로퍼티 키로 사용할 수 있다. Symbol 값은 유일한 값이므로 Symbol 값을 키로 갖는 프로퍼티는 다른 어떠한 프로퍼티와도 충돌하지 않는다.

 

 Symbol.iterator

Well-Known Symbol은 자바스크립트 엔진에 상수로 존재하며 자바스크립트 엔진은 Well-Known Symbol을 참조하여 일정한 처리를 한다. 예를 들어 어떤 객체가 Symbol.iterator를 프로퍼티 key로 사용한 메서드 가지고 있으면 자바스크립트 엔진은 이 객체가 이터레이션 프로토콜을 따르는 것으로 간주하고 이터레이터로 동작하도록 한다.

Symbol.iterator를 프로퍼티 key로 사용하여 메서드를 구현하고 있는 빌트인 객체(빌트인 이 터러블)는 아래와 같다. 아래의 객체들은 이터레이션 프로토콜을 준수하고 있으며 이터러이터를 반환한다.

  • Array.prototype [Symbol.iterator]
  • String.prototype [Symbol.iterator]
  • Map.prototype [Symbol.iterator]
  • Set.prototype [Symbol.iterator]
  • NodeList.prototype [Symbol.iterator]
  • HTMLCollection.prototype [Symbol.iterator]
  • arguments [Symbol.iterator]

 

인터페이스가 없는 자바스크립트에서 심벌을 통해 인터페이스를 구현할 수 있습니다.

 

 

반응형

댓글