[JavaScript] throw와 try - catch문을 이용하자

yoon·2023년 2월 25일

자바스크립트의 '약형'언어로서의 성질이 보여주는 관대함은 때론 불편을 야기하기도 한다. 예를 들어 사용자로부터 숫자만을 입력받고 싶음에도 사용자가 숫자가 아닌 문자열을 입력해도 자바스크립트는 에러를 발생시키지 않는다. 이러한 경우 개발자는 throwtry - catch을 함께 이용해, 자체저으로 오류를 정의하고 처리할 수 있다.

const enteredValue = prompt("Maximum life for you and the monster.", "100");

let chosenMaxLife = parseInt(enteredValue);

if (isNaN(enteredValue) || enteredValue <= 0) {
  chosenMaxLife = 100;
}

기존 코드를 try - catch문을 이용해 수정해보겠다. 기존 코드에서 사용자가 숫자가 아니거나 0 이하의 수를 입력하였을 경우 조건문을 활용해 Life 를 100으로 강제하였다. 물론 이러한 방식도 오류를 해결하는 방법이 맞지만, try - catch문을 활용할 수 도 있다.

throw로 사용자 정의 오류 만들기

  if (isNaN(enteredValue) || enteredValue <= 0) {
    throw { message: "you have to enter value that is number more than 0" };
  }

throw 키워드를 사용하면 사용자가 원하는 타입의 오류를 마음껏 만들 수 있다. throw 키워드 뒤에 문자열, 숫자, 배열 등을 기입할 수 있으며, 국룰은

{message : "오류 내용"}

과 같은 객체를 내보내는 것이다. 이 상태로 조건식에 만족하는 입력을 하게 되면 다음과 같은 로그를 출력한다.

명백한 오류 메시지이다. 그리고 여기 Uncaught이라는 키워드가 등장하는데, 이는 try - catch 문에 의해 오류를 잡지 못함을 의미한다.

try - catch

  try {
    if (isNaN(enteredValue) || enteredValue <= 0) {
      throw { error: "you have to enter value that is number more than 0" };
    }
  } catch (error) {
    console.log(error);
    enteredValue = 100;
  }

위 코드는 try - catch문에 의해 내가 정의한 오류를 잡는 모습이다.

try 블럭 안에는 오류를 발생할 수 있는 내용이 들어가고, catch 블록 안에는 오류 발생 시 실행할 내용을 작성한다. finally 키워드도 존재하는데, 이는 오류 발생 유무와 상관없이 항상 실행할 내용이 들어가고, 자주 쓰이진 않는다.

catch 이후 괄호에는 오류 객체를 담기 위한 식별자라고 생각하면 된다. 즉 아무거나 작성해도 된다.
따라서 다음 코드를 실행하면

보이는 것처럼 오류 메시지가 아니라 console.log()에 의한 단순한 출력메시지이다. 오류가 잡힌 것이다.

이와 같이 throw 와 try-catch 문을 사용하면 의도적으로 오류를 발생시켜 오류 로그를 남기는 동시에, 오류 발생으로 인한 스크립트 작동 중지 상황을 예방할 수 있다.

try - catch문을 모든 오류가 발생할 수 있는 상황에 사용하기엔 쉽지 않다. 주로 네트워크 오류와 같이 제어할 수 없는 오류에 대해서 사용하면 좋다.

0개의 댓글