IT/JavaScript & TypeScript

[TypeScript] Record 해시 테이블로 switch문 대체하기

땅일단 2025. 3. 6. 22:55

이것은 회사 후임분이 자주 쓰시던 팁인데, 좋아보여서 나도 사용해보기로 했다.

일단 기존에 작성하던 방법은 아래와 같은 예시이다.

export enum CharacterType {
    LANCER, ROUXLS, RALSEI
}

export const getCharacterOrderByName = (name: string) => {
    switch (name) {
        case "lancer":
            return CharacterType.LANCER;
        case "rouxls":
            return CharacterType.ROUXLS;
        case "ralsei":
            return CharacterType.RALSEI;
    }
}

 

enum을 사용하다가 string으로 number형 enum값을 가져오려는 코드이다.

이 코드에서는 switch로 하나하나 검사하여 enum값을 리턴해주고 있다.

enum들의 개수가 얼마 되지 않을 때는 상관없지만, 개수가 많이 늘어나게 된다면 switch문은 그만큼 여러 번의 루프를 돌면서 검사를 해야 할 것이다.

 

 

const characterTable: Record<string, CharacterType> = {
    "lancer": CharacterType.LANCER,
    "rouxls": CharacterType.ROUXLS,
    "ralsei": CharacterType.RALSEI
}

export const getCharacterByName2 = (name: string) => {
    return characterTable[name];
}

Record로 key-value 테이블을 사전에 작성해둔다면 이 문제가 해결된다.

루프를 돌 필요 없이 key를 통해 바로 value를 가져올 수 있을 것이다.

 

다만 Record의 key는 number, string, symbol 타입만을 사용할 수 있다는 점을 유의해야 한다.

 

 

 

델타룬 뒷 챕터 좀 내 다오...