jjamming.com
✏️
TypeScriptProject

유니언 타입 확장에 대응하는 안전한 처리법

2025.06.20

🔁 타입이 바뀌면 return도 바꿔야죠 : 유니언 타입 확장에 대응하는 안전한 처리법

앞선 포스트에서 MarketIndex["direction"] 타입을 함수 매개변수로 재사용하는 법을 소개했다.

그런데 이렇게 타입만 바꿔준다고 과연 충분할까?

🧩 문제 상황

아래는 MarketIndex 타입이다. direction이 "up" 혹은 "down"일 때, 색상을 다르게 보여주기 위해 조건문으로 처리하고 있다.

export type MarketIndex = {
  value: number;
  volatility: string;
  direction: "up" | "down";
  chartData: ChartDataPoint[];
};
const getChangeColor = (direction: MarketIndex["direction"]) => {
  return direction === "up" ? "text-red-500" : "text-blue-500";
};

지금은 문제가 없어 보이지만, 나중에 direction 값이 “neutral”처럼 하나 더 추가되면 어떨까?

direction: "up" | "down" | "neutral";

이 경우 함수는 여전히 “up”과 그렇지 않은 케이스만 처리하기 때문에, neutral과 down은 같은 결과를 낼 것이고, neutral 타입 추가의 의미가 없을 것이다.

🛠️ 해결 방법: Switch문 적용하기

const getChangeColor = (direction: MarketIndex["direction"]) => {
  switch (direction) {
    case "up":
      return "text-red-500";
    case "down":
      return "text-blue-500";
    case "neutral":
      return "text-gray-400";
  }
};

이런 식으로 switch 문을 만들어두면 나중에 direction에 새로운 타입이 추가되어도 기존 코드의 큰 변경 없이 새로운 타입에 대한 return문만 고쳐주면 된다. (OCP원칙 ..?)

✅ 장점

  • 타입 확장에 안전하게 대응
  • 예외 케이스를 빠짐없이 처리 가능
  • 더욱 견고하고 의도한 동작이 보장되는 함수 작성 가능

🚀 결론

타입을 재사용하는 것도 중요하지만, 그에 따라 함수의 동작이 안전하게 유지되도록 처리하는 것이 더더욱 중요하다고 생각한다.

프로젝트를 진행할수록 소프트웨어 공학에서 배운 여러 원리들이 체감되는 느낌이다. 역시 이론보단 실전이 더 빠르게 배우는 것 같다.

👇 도움이 되셨다면 👇

B

u

y

M

e

A

C

o

f

f

e

e

© Powered by danmin