Error Handling / 예외처리
https://www.youtube.com/watch?v=LQ182IQZfW8
1. Runtime Errors
코드를 실행하고 코드 줄에서 오류가 발생하면 해당 오류를 런타임 오류 라고합니다 .
JavaScript에는 무엇이 잘못되었는지 알려주 는 nameand message속성 이있는 내장 오류 객체가 있습니다 .
내장 런타임 오류의 예는 다음과 같습니다.
ReferenceError: 변수 또는 함수를 찾을 수없는 경우.
TypeError: 값이 유효한 유형이 아닌 경우
2.Constructing an Error
이전에는 내장 오류가 코드의 일반적인 실수에 대해 경고하는 방식을 보았습니다.
그러나 기본 제공 오류로 처리되지 않는 오류 메시지가 필요한 경우 어떻게해야합니까?
사용자에게 인수로 전달 된 문자열이 사용자 지정 메시지에 너무 짧다는 것을 알려야한다고 가정 해 보겠습니다.
이러한 메시지는 내장 오류에 포함되지 않지만,
Error우리 프로그램에 고유 한 메시지로 자체 오류 객체를 만드는 함수를 사용할 수 있습니다 !
console.log(Error('Your password is too weak.'));
// Prints: Error: Your password is too weak.
이 Error함수는 오류의 message속성 값이되는 문자열의 인수를받습니다 .
위의 코드 스 니펫에서 Error함수를 사용하여 메시지가있는 오류 객체를 생성했습니다
console.log(new Error('Your password is too weak.'));
// Prints: Error: Your password is too weak.
new키워드로 생성 된 오류도 볼 수 있습니다 . 두 방법 모두 동일한 기능을 제공합니다.
console.log(Error('User missing name'))
console.log('Will logging the error stop our program from running?');
/*
Error: User missing name
at Object.<anonymous> (/home/ccuser/workspace/error-handling-error-construction/main.js:3:13)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:427:7)
at startup (bootstrap_node.js:151:9)
at bootstrap_node.js:542:3
Will logging the error stop our program from running?
*/
3. The throw Keyword
오류가 발생한다고해서 프로그램이 중지되는 것은 아닙니다. 프로그램을 중지하려면 오류가 발생해야합니다.
JavaScript에서 오류를 발생시키기 위해 다음 throw과 같은 키워드를 사용합니다 .
throw Error('Something wrong happened');
// Error: Something wrong happened
throw키워드 를 사용하면 오류가 발생하고 throw문 이후 코드 가 실행되지 않습니다.
throw Error('Something wrong happened');
// Error: Something wrong happened
console.log('This will never run');
throw Error('Something wrong happened');실행되고 오류 개체가 발생되면,
console.log()문 (단지 자바 스크립트 내장 오류가 발생했을 때처럼!) 실행되지 않습니다.
4. try...catch Statement
지금까지 발생한 오류로 인해 프로그램 실행이 중지되었습니다.
그러나 우리는 오류를 처리 하고 프로그램이 계속 실행되도록 코드를 작성하여
이러한 오류를 예상하고 처리 할 수 있습니다.
JavaScript에서는 try...catch문을 사용 하여 오류를 예측하고 처리합니다.
try {
throw Error('This error will get caught');
} catch (e) {
console.log(e);
}
// Prints: This error will get caught
console.log('The thrown error that was caught in the try...catch statement!');
// Prints: 'The thrown error that was caught in the try...catch statement!'
- try이라고하는{} 중괄호 안에 코드가 있습니다.
- try블록 안에 오류가 발생할 것으로 예상되는 코드를 삽입합니다.
- try블록 에서 오류가 발생하면 어떤 일이 발생하는지 확인하고 싶기 때문에 아래 메시지와 함께 오류를 발생시킵니다. - 'This error will get caught'.
- try블록 다음에는 블록 try에서 발생한 오류를 수락 하는 catch 문이 있습니다. e는 발생한 오류를 나타냅니다.
- 뒤에 오는 중괄호 catch(e)는 catch 블록 으로 알려져 있으며 오류를 처리하기 위해 실행되는 코드를 포함합니다.
- 오류가 발견 되었기 때문에 우리의 console.log() after try...catch문은 'The thrown error that was caught in the try...catch statement!'.
일반적으로 try...catch명령문에서 우리는 try블록의 코드를 평가하고 코드에서 오류가 발생하면
catch블록 내부의 코드 가 오류를 처리합니다.
Handling with try...catch.
const someVar = 'Cannot be reassigned';
try {
someVar = 'Still going to try';
} catch(e) {
console.log(e);
}
// Prints: TypeError: Assignment to constant variable.
위의 예에서는 사용자 지정 오류를 발생시키기 위해 throw키워드를 사용하지 않고
const변수 를 다시 할당하려고 시도 했고 a TypeError가 발생했습니다.
그런 다음 catch블록에서 오류를 콘솔에 기록했습니다.
try...catch내장 된 JavaScript 오류에 대한 문을 사용하면 프로그램에서
직접 작성되지 않은 외부 소스의 데이터를 사용해야 할 때 정말 유용합니다.
데이터베이스에서 배열을 가져올 것으로 예상하지만 반환되는 정보는 문자열입니다.
우리 프로그램에서는 배열에서만 작동하는 함수를 가질 수 있습니다.
이 함수가 배열 대신 문자열로 호출되면 오류가 발생하고 프로그램 실행이 중지됩니다!
그러나 우리 try...catch는 우리의 프로그램이 계속 실행될 수 있도록하는 오류를 처리하기 위해 명령문을 사용할 수 있으며 무엇이 잘못되었는지를 아는 메시지를받습니다!