JS 예외처리

gang_shik·2025년 3월 19일
0

JavaScript

목록 보기
23/23

예외처리란?

  • 예외를 처리하는 방법, 특정 문 실행시 에러가 발생한다면 나머지 코드를 계속 실행하는 것은 의미가 없음
  • 그래서 이러한 예외를 처리해서 우회하는 방법이나 다양하게 처리를 하는 것, 사용자에게 예외 사항을 알려주는 경우도 포함

try-catch

  • 기본적으로 에러를 다룰 때 try-catch 구문으로 다룸
  • try 구문에서 발생한 에러는 catch에서 error 객체로 들어가 catch 구문이 실행이 됨
  • 이 error 객체에 다양한 에러 관련 값들이 있기에 이를 잘 처리해 에러 처리를 할 수 있음
try {
  X();
} catch (e) {
  // try에서 에러가 발생할 경우 실행되는 구문
  console.error(e);
  console.error('에러 발생');
} finally {
  // 어떠한 상황에서도 실행되는 구문
}

에러 - 던지기

  • 사용자 & 개발자를 위해서 일부러 에러를 던져서 알려줄 수 있음
  • 아래와 같이 에러를 던져서 처리할 수 있음
  • 사이트가 다운되거나 알 수 없는 에러 등 사용자에게 안내해서 잘 처리할 수 있음
function login(id, pw) {
  if (id === 'zero' && pw === 0000) {
    return true;
  }

  // 위 조건을 만족 못해도 문법적 에러가 없기에 직접 아래와 같이 throw를 통해 에러를 발생시켜줘야함
  throw new Error('로그인 실패')
}

try {
  login('one', 111)
} catch (error) {
  console.error(error);
  console.error('에러 발생');
  window.alert(error); // 사용자에게 안내하는 것도 추가
} finally {
  console.log('로그인 시도 시간 : ' + new Date());
}

스택 - 추적

  • 에러는 스택 형태로 쌓여서 기록이 됨, e.stack 을 통해서 에러의 스택을 확인할 수 있음
  • 어디서부터 어디가 문제가 있는지 그 기록을 확인가능함, 어디서 잘못되고 처리해야하는지 스택 형태로 추적해서 확인가능함
function x() {
  c();
  v();
  b();
  x();
  x();
  x();
}

try {
  x();
} catch (e) {
  console.error(e.stack);
}
  • 로그를 보게 되면 스택 기록임을 알면 됨(에러에 대해서)

커스텀 - 에러

  • 에러 객체는 메시지, 스택 꽤 여러가지 다룰 수 있는게 많음
  • 좀 더 구체적인 에러처리를 위해서 에러 객체를 확장해서 직접 커스텀한 에러를 만들 수 있음
  • 그리고 에러 객체를 구분해서 좀 더 디테일하게 처리할 수도 있음
class LoginError extends Error {
  constructor(message) {
    super(message);

    this.name = 'Login Error';
  }
}

// LoginError도 확장가능
class SomeError extends LoginError {

}

function login(id, pw) {
  if (id !== 'a') {
    throw new LoginError('아이디 불일치')
  }

  if (id === 'a' && password === 'a') {
    return true;
  }

  throw new Error('로그인 실패');
}

try {
  login('ac', 'a');
} catch (e) {
  console.error(e);
  if (e instanceof LoginError) {
    console.error('로그인 에러가 발생했습니다');
  } else {
    console.error('에러가 발생했습니다.');
  }
} finally {
  console.log('로그인 시도 시간 : ' + new Date());
}
  • 커스텀 에러 객체를 기존의 에러 객체에서 확장해서 만들 수 있음
  • 더 견고하게 에러 처리를 하다보면 직접 만들어서 처리할 수 있음, 또한 커스텀 에러를 더 확장해서 만들 수도 있음
profile
측정할 수 없으면 관리할 수 없고, 관리할 수 없으면 개선시킬 수도 없다

0개의 댓글