TypeScript에서 이미 모든 필드에 ?
를 붙여 선택적으로 정의하고, 타입도 잘 만들어뒀는데 왜 다시 컴포넌트에서 ?.
, ||
같은 예외처리를 해야 할까요?
예:
playlist.images?.[0]?.url || ""
playlist.name || "No name"
playlist.owner?.display_name || "Unknown"
맞습니다. 예를 들어 다음과 같이 타입을 정의했다고 가정하죠:
export interface SimplifiedPlaylist {
images?: Images[];
name?: string;
owner?: Owner;
}
이는 개발 시점에 TypeScript가 “이 값은 있을 수도, 없을 수도 있어요”라고 알려주는 힌트입니다.
즉, 타입 안전성(Type Safety)을 확보한 것이죠.
서버에서 내려주는 데이터가 진짜로 undefined
거나 null
, 또는 []
일 수 있습니다.
그런 경우에:
playlist.images[0].url
→ ❌ TypeError (Cannot read properties of undefined)playlist.owner.display_name
→ ❌ Cannot read property of undefined이런 에러는 사용자에게 흰 화면, 앱 크래시로 이어질 수 있기 때문에 반드시 런타임 예외처리가 필요합니다.
구분 | 역할 |
---|---|
타입 정의 | 개발자에게 힌트를 주고 IDE 자동완성, 타입 오류 방지 |
예외처리 (?. , ` |
타입은 "그럴 수 있다"는 걸 알려주고,
예외처리는 "진짜 그랬을 때 안 망치게" 도와준다.
실전 서비스에서는 항상 두 가지를 함께 써야 앱이 안정적으로 동작합니다.