타입스크립트의 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로 개발을 시작했어서 그런지 처음에 자바스크립트를 접하고 아주 재미있고 자유도가 높다고 생각했는데, 갈 수록 나 자신에게 쇠사슬이 묶여있는게 오히려 편하다고 느낀다.
프로젝트 크기가 커질수록 더 그렇게 느끼는 것 같다.
물론 이런 기능을 잘 활용하면 더 편할때도 많긴 하다. 코드가 짧아지는 것도 맞고..
결국 내 자신이 잘하면 아무일도 안생길거라는 생각도 든다.