TypeScript - 기호: 초보자 가이드

안녕하세요, 미래의 코딩 슈퍼스타! 오늘 우리는 TypeScript 기호의 세계에 흥미로운 여정을 떠납니다. 이전에 프로그래밍을 해 본 적이 없어도 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되겠습니다. 우리는 이 주제를 단계별로 탐구하겠습니다. 그러니 마음에 드는 음료를 한 잔 챙겨서 함께 빠져보세요!

TypeScript - Symbols

기호는 무엇인가요?

본격적인 내용에 들어가기 전에 기호(Symbols)에 대해 이해해 보겠습니다. 상상해 보세요. 보물상자가 있고, 그것을 열기 위해서는 독특한 키가 필요합니다. TypeScript에서 기호는 그러한 독특한 키와 같아요 - 코드에서 사용할 수 있는 특별하고 하나인 식별자입니다.

문법: 기호를 만드는 방법

기호를 만드는 것은 샌드위치를 만드는 것만큼 간단합니다(아마 더 쉬울 수도 있습니다!). 다음과 같이 합니다:

let mySymbol = Symbol();

이제 당신은 첫 번째 기호를 만들었습니다. 하지만 기다리세요, 더 있습니다! 기호에 설명을 추가할 수도 있습니다:

let namedSymbol = Symbol("이것은 내 특별한 기호입니다");

이 설명은 기호의 독특성에 영향을 주지 않지만, 나중에 기호를 식별하는 데 도움이 될 수 있습니다.

작은 연습

두 개의 기호를 만들어 비교해 보겠습니다:

let symbol1 = Symbol();
let symbol2 = Symbol();

console.log(symbol1 === symbol2); // 출력: false

설명이 없이 만든 두 기호이지만, 여전히 독특합니다. 쌍둥이처럼 보일 수 있지만, 다른 개체입니다!

기호는 독특하고 불변합니다

이제 두 개의 큰 단어에 대해 이야기해 보겠습니다: 독특하고 불변합니다.

독특

만든 각 기호는 하나입니다. 눈송이처럼, 설명이 같아도 여전히 다릅니다:

let sym1 = Symbol("mySymbol");
let sym2 = Symbol("mySymbol");

console.log(sym1 === sym2); // 출력: false

불변

기호를 만든 후에는 변경할 수 없습니다. 돌에 새기는 것처럼, 영원히 그대로 있습니다.

let immutableSymbol = Symbol("변경할 수 없음");
// immutableSymbol을 수정할 방법이 없습니다!

기호를 객체 프로퍼티의 키로 사용

기호의 가장 멋진 기능 중 하나는 객체 프로퍼티의 키로 사용할 수 있다는 점입니다. 보물상자에 있는 비밀 공간처럼, 오직 당신만이 알고 있는 것입니다!

let specialKey = Symbol("비밀공간");

let treasureChest = {
[specialKey]: "숨겨진 보물!",
gold: 100,
silver: 200
};

console.log(treasureChest[specialKey]); // 출력: "숨겨진 보물!"
console.log(treasureChest.gold); // 출력: 100

이 예제에서 specialKeytreasureChest 객체의 비밀 프로퍼티에 접근하는 데 사용되는 기호입니다. 일반 키인 gold은 평소처럼 작동하지만, 기호 키는 독특한 계층을 추가합니다.

스위치 문에서 기호 사용

기호는 스위치 문에서도 사용할 수 있습니다. 특정 키에만 열리는 특별한 잠금장치처럼입니다:

let actionSymbol = Symbol("액션");

switch (actionSymbol) {
case Symbol("액션"):
console.log("이 메시지는 로그에 기록되지 않습니다");
break;
case actionSymbol:
console.log("이 메시지가 로그에 기록됩니다");
break;
default:
console.log("기본 사례");
}

Symbol("액션")이 첫 번째 사례에 있지만, 우리의 actionSymbol과는 다릅니다. 각 기호는 독특합니다!

독특한 기호

TypeScript는 "독특한 기호"라는 개념도 가지고 있습니다. 이들은 더 특별한 기호로, TypeScript는 이들을 완전히 독특한 타입으로 취급합니다:

const uniqueSymbol: unique symbol = Symbol("저는 독특합니다!");

// 이 작업은 됩니다:
let symVar1: typeof uniqueSymbol = uniqueSymbol;

// 이 작업은 안 됩니다:
// let symVar2: unique symbol = Symbol("저도 독특합니다!");
// 오류: 'unique symbol' 타입의 변수는 'const'로 선언되어야 합니다.

독특한 기호는 const로 선언되어야 하며, 재생성할 수 없습니다. 한정판 수집품처럼, 사라지면 영원히 사라집니다!

기호를 처리하는 메서드

기호를 처리하는 몇 가지 유용한 메서드를 살펴보겠습니다:

메서드 설명 예제
Symbol.for() 글로벌 기호 등록에서 기호를 만듭니다 let globalSym = Symbol.for("myGlobalSymbol");
Symbol.keyFor() 글로벌 기호 등록에서 기호의 키를 검색합니다 let key = Symbol.keyFor(globalSym);
Object.getOwnPropertySymbols() 주어진 객체에서 모든 기호 속성을 반환합니다 let symbols = Object.getOwnPropertySymbols(myObject);

다음은 이 메서드들을 사용하는 빠른 예제입니다:

let globalSym = Symbol.for("myGlobalSymbol");
console.log(Symbol.keyFor(globalSym)); // 출력: "myGlobalSymbol"

let obj = {
[Symbol("key1")]: "value1",
[Symbol("key2")]: "value2"
};

console.log(Object.getOwnPropertySymbols(obj).length); // 출력: 2

이제 TypeScript 기호에 대한 간단한 강의를 마친 것입니다. 연습이 완벽을 이루는 열쇠이니, 이 개념들을 자신의 코드에서 실험해 보지 마세요. 누구 knows? 당신은 코드 슈퍼파워를 풀어낼지도 모릅니다!

미래의 TypeScript 마법사, 행복한 코딩을! ?‍♂️✨

Credits: Image by storyset