👶 TypeScript

에러 처리 - null 반환

개발자 린다씨 2023. 1. 22. 18:00
반응형

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을 확인해야 하므로 연산을 중첩하거나 연결할 때 코드가 지저분해집니다.

반응형