Union Type

@SharkniA · January 28, 2024 · 5 min read

타입스크립트의 Union Type

타입스크립트에는 유니언 타입이라는게 있다. 쉽게 말해 값이 여러 타입을 or 로 가질 수 있는 것이다. 막나간다.

두 개의 이상의 타입을 | 기호를 사용해 결합하면 유니언 타입이 된다. 이를 통해 변수가 함수 매개변수가 여러 타입 중 하나의 타입을 가질 수 있음을 나타낼 수 있다.

type StringOrNumber = string | number;

let value: StringOrNumber;

value = 'Hello'; // 유효함
value = 123;     // 유효함

장점

유연성

다양한 타입을 하나의 변수에 할당할 수 있어 다양한 시나리오에 대응할 수 있다.

타입 안정성 보장

유니언 타입을 사용하면 타입스크립트 컴파일러가 타입 안정성을 체크해준다. 즉, 할당된 값이 유니언 타입에 명시된 타입 중 하나와 일치하지 않으면 오류를 발생시킨다.

코드 간결성

복잡한 조건에 대한 타입을 간결하게 표현할 수 있다.

유니언 타입 사용 시 고려할 사항

타입 가드

유니언 타입은 여러 타입을 허용하기 때문에 실행 시점에 정확한 타입을 확인하기 위해 타입 가드를 사용해야 한다.

function process(value: StringOrNumber) {
    if (typeof value === 'string') {
        // value는 여기서 string 타입입니다.
    } else {
        // value는 여기서 number 타입입니다.
    }
}

공통 필드 사용

유니언 타입의 모든 구성원이 공통으로 가진 필드나 메소드에만 접근할 수 있다. 공통되지 않은 필드에 접근하려면 타입 가드를 사용해야 한다.

복잡한 유니언 타입

유니언 타입이 복잡해질 수록 그 타입을 사용하는 코드는 더 복잡해질 수 있다. 따라서 타입을 너무 복잡하게 만들지 않도록 주의해야 한다.

파이썬의 Union Type

여기까지 알아보다가 파이썬에서도 왠지 비슷한게 있을 것 같다는 생각이 들어서 찾아봤고, 역시 있음을 알게 됐다.

파이썬은 타입스크립트와 다르게 동적 타이핑 언어이지만 3.5 이상에서는 타입 힌팅을 사용하여 비슷한 기능을 구현할 수 있고, 3.10 이상에서는 Union 대신 | 연산자를 이용하여 유니언 타입을 정의할 수 있다.

파이썬 3.9 이전

typing 모듈의 Union 을 사용하여 나타낼 수 있다.

from typing import Union

def process(value: Union[str, int]):
    print(value)

파이썬 3.10 이상

def process(value: str | int):
    print(value)

타입스크립트의 Union Type과 다른 점

파이썬은 동적 타이핑 언어이므로 이 제약은 파이썬의 실행에 영향을 미치지 않는다. 즉 런타임에서 타입 안전을 강제하지 않는다.

단순히 개발자의 가독성 향상, IDE의 자동완성 지원, mypy등 정적 타입 체킹 도구를 위한 것이다.

저렇게 해두어도 런타임에서 다른 타입의 값이 할당될 수 있음을 주의해야 한다.

사담

노션 API를 활용한 블로그 쉽게 하는걸 만들다가 타입이 복잡하게 선언되어있는걸 보고 혹시나 해서 찾아봤더니 내 예상이 맞았다.

C로 개발을 시작했어서 그런지 처음에 자바스크립트를 접하고 아주 재미있고 자유도가 높다고 생각했는데, 갈 수록 나 자신에게 쇠사슬이 묶여있는게 오히려 편하다고 느낀다.

프로젝트 크기가 커질수록 더 그렇게 느끼는 것 같다.

물론 이런 기능을 잘 활용하면 더 편할때도 많긴 하다. 코드가 짧아지는 것도 맞고..

결국 내 자신이 잘하면 아무일도 안생길거라는 생각도 든다.

@SharkniA
만 4살 백엔드 개발자
© SharkniA, Built with Gatsby.