All'alba vincerò

At dawn, I will win!

Javascript

[JS] try catch / 에러 던지기(throw new Error)

나디아 Nadia 2024. 6. 17. 13:45

try catch

: 코드 실행 중에 발생할 수 있는 오류를 처리하기 위해 사용

  • 에러가 발생해도 프로그램이 죽지 않도록 하기 위해 사용(= 보험)
  • 서버에서 데이터를 가져오는 경우(통신하는 경우) 반드시 try catch문 사용
  • finally는 에러 발생과 상관없이 기본적으로 실행됨
    • 에러가 발생하지 않아서 try문이 실행되어도 실행됨
    • 에러가 발생해서 catch문이 실행되어도 실행됨
try {
   ...
}
catch (err) {
  // 에러 핸들링
} finally {
  // 에러 발생과 관계없이 무조건 실행됨
}

* err.name:
에러 이름

* err.message: 에러 내용

 

 

 

  • 오직 런타임 에러에만 동작
  • 동기적으로 동작
  • 코드가 문법적으로 잘못된 경우엔 try..catch가 동작하지 않음
try {
  console.log(value);
} catch (e) {
  console.log(e.name); // ReferenceError
  console.log(e.message); // value is not defined
} finally {
  console.log("finally 실행");
}

 

 

 

예시

try {
  const data = JSON.stringify({
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  })


  const user = JSON.parse(data);

  console.log(user.name); // Leanne Graham
  console.log(user.value);

  if (!user.value) {
    throw new ReferenceError('해당 키 값은 존재하지 않습니다.')
  }
  
} catch (error) {
  console.log('JSON Error : ' + error.message);
}

console.log('JSON Error : ' + error.message);

 

 


 

throw 연산자

: 에러(오류)를 발생시키는 키워드

  • 코드 실행 도중 명시적으로 에러를 발생시키고 싶을 때 사용
  • throw가 실행되면 해당 위치에서 즉시 실행이 중단됨
  • try...catch 안에서 처리하는 게 일반적
    • try catch 문 사용 시 try 안에서 사용함
throw 문자열 /  Error 객체 등

 

 

 

  • throw 뒤에 오는 값은 임의의 값(문자열, 숫자, 에러 인스턴스 등), 객체 등 모두 가능함
  • 다만 관례적으로는 Error 객체를 던지는 게 좋음
throw "에러 발생!"; // 문자열

throw 123; // 숫자

try {
  throw {
    name: 'MyCustomError',
    message: '이것은 커스텀 에러 메시지입니다.',
    code: 500,
  };
} catch (e) {
  console.log('에러 이름:', e.name);
  console.log('에러 메시지:', e.message);
  console.log('에러 코드:', e.code);
}

throw new Error("이건 에러 메시지입니다."); // Error 객체 (권장)

 

 

 

에러 객체 생성

  • JS는 Error, SyntaxError, ReferenceError, TypeError등의 표준 에러 객체 관련 생성자를 지원함
new Error('에러 메세지')

new SyntaxError()
new ReferenceError()

 

 

 


 

 

'try..catch'와 에러 핸들링

 

ko.javascript.info