반응형
null 반환
유저의 생일을 입력받아 Date 객체로 파싱 하는 프로그램을 구현해 봅시다.
function ask(){
return prompt('생일 언제임?')
}
function parse(birthday: string): Date {
return new Date(birthday)
}
let date = parse(ask())
console.info('생일은', date.toISOString())
단순한 텍스트 입력창을 사용했으므로 사용자가 입력한 내용을 검증해야 합니다.
function ask(){
return prompt('생일 언제임?')
}
function parse(birthday: string): Date | null{
let date = new Date(birthday)
if(!isValid(date)){
return null
}
return date
}
// 입력한 날짜가 유효한지 검사
function isValid(date: Date){
return Object.prototype.toString.call(date) === '[object Date]'
&& !Number.isNaN(date.getTime())
}
입력한 내용을 사용하기 전에 가장 먼저 결과가 null인지 확인합니다.
function ask() {
return prompt("생일 언제임?");
}
function parse(birthday: string): Date | null {
let date = new Date(birthday);
if (!isValid(date)) {
return null;
}
return date;
}
// 입력한 날짜가 유효한지 검사
function isValid(date: Date) {
return (
Object.prototype.toString.call(date) === "[object Date]" &&
!Number.isNaN(date.getTime())
);
}
let date = parse(ask());
if (date) {
console.info("생일은", date.toISOString());
} else {
console.error("입력한 거... 날짜로 안 바뀌자나...");
}
타입 안전성을 유지하면서 에러를 처리하는 가장 간단한 방법은 null을 반환하는 것입니다.
유저가 유효한 내용을 입력하면 Date가 반환되고 그렇지 않으면, null이 반환되는데 이때 타입 시스템은 코드가 두 가지 상황을 모두 처리하는지를 확인합니다.
하지만 parse에서 발생하는 에러를 이 방식으로 처리하면 문제가 생긴 원인을 알 수가 없습니다.
결국 개발자는 로그를 일일이 확인해 가며 디버깅을 해야 하고, 유저 역시 "YYYY/MM/DD 형식으로 날짜를 입력하세요" 같은 자세한 오류 메시지 대신 "입력한 거... 날짜로 안 바뀌자나..." 같은 모호한 에러 메시지를 보게 될 것입니다.
null을 반환하면 조합이 어려워진다는 점도 문제입니다.
모든 연산에서 null을 확인해야 하므로 연산을 중첩하거나 연결할 때 코드가 지저분해집니다.
반응형
'👶 TypeScript' 카테고리의 다른 글
에러 처리 - 예외 반환 (0) | 2023.01.23 |
---|---|
에러 처리 - 예외 던지기 (0) | 2023.01.23 |
프로토타입 안전하게 확장하기 (0) | 2023.01.22 |
이름 기반 타입 흉내내기 (0) | 2023.01.22 |
탈출구 - 확실한 할당 어서션 (0) | 2023.01.22 |