ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVASCRIPT-모던자바스크립트] 옵셔널 체이닝 '?.'3 / 심볼형
    Javascript& React study 2021. 10. 31. 10:22
    728x90
    반응형
    SMALL

    ?.은 delete와 조합해서도 사용할 수 있다.

    delete user?.name; // user가 존재하면 user.name을 삭제합니다.
    ?.은 읽기나 삭제하기에는 사용할 수 있지만 쓰기에는 사용할 수 없다.
    ?은 할당 연산자 왼쪽에서 사용할 수 없다.
    // user가 존재할 경우 user.name에 값을 쓰려는 의도
    
    user?.name = "Violet"; // 에러
    // 에러가 발생하는 이유는 undefined = "Violet"이 되기 때문​


    심볼

    심볼(symbol)은 유일한 식별자 (unique identifier)를 만들고 싶을 때 사용한다. Symbol()을 사용하면 심볼값을 만들 수 있다.

    // id는 새로운 심볼이 됩니다.
    let id = Symbol();

    심볼을 만들 때 심볼 이름이라 불리는 설명을 붙일 수 있다. 심볼의 이름은 디버깅시 아주 유용하다.

    // 심볼 id에는 "id"라는 설명이 붙습니다.
    let id = Symbol("id");

    심볼은 유일성이 보장되는 자료형이기 때문에 설명이 동일한 심볼을 여러 개 만들어도 각 심볼값은 다르게 된다. 심볼에 붙이는 설명(심볼 이름)은 어떤 것에서 영향을 주지 않은 이름표 역할만을 한다고 볼 수 있다. 

    설명이 같은 심볼 두 개를 만들고 비교를 해보면 좀 더 이해하기 쉽다. 

    let id1 = Symbol("id");
    let id2 = Symbol("id");
    
    alert(id1 == id2); // false

    참고로 Ruby 등의 언어에서도 '심볼'과 유사한 개념을 사용하게 되는데 자바스크립트의 심볼은 이들 언어에 쓰이는 심볼과 다르기 때문에 혼동하면 안된다.

    심볼은 문자형으로 자동 형 변환되지 않습니다.

    자바스크립트에서는 문자형으로의 암시적 형 변환이 비교적 자유롭게 일어나는 편이다. alert함수가 거의 모든 값을 인자로 받을 수 있는 이유가 이 이유이다. 심볼은 예외로 심볼형 값은 다른 자로형으로 암시적 형 변환(자동 형 변환)되지 않는다.
    let id = Symbol("id");
    alert(id); // 에러​

    문자열과 심볼은 근본이 다르기 때문에 우연히라도 서로의 타입으로 변환되어서는 안된다. 자바스크립트에선 '언어 차원의 보호장치(language guard)'를 마련해 심볼형이 다른 형으로 변환되지 않게 막아준다.
    심볼은 반드시 출력해줘야 하는 상황이라면 아래와 같이 .toString()메서드를 명시적으로 호출해주면 된다.

    let id = Symbol("id");
    alert(id.toString()); // Symbol(id)가 얼럿 창에 출력됨

    symbol.description 프로퍼티를 이용하면 설명만 보여주는 것도 가능하다.

    let id = Symbol("id");
    alert(id.description); // id

     

    728x90
    반응형
    LIST

    댓글

Designed by Tistory.