35. try-catch, throw
try-catch
형태:
try 블록 catch (식별자) 블록
try 블록 finally 블록
try 블록 catch (식별자) 블록 finally 블록- try 문에서 예외 발생을 인식
예외가 발생하면 catch 블록 실행
var value; try { value = ball; } catch (error) { console.log("catch 실행"); } // catch 실행
- try 블록에서 ball 을 value 에 할당할 때 ball 변수가 없으므로 에러 발생
- 에러가 발생하면 catch(error) 블록 실행
파라미터 error 에 JS 의 Error 오브젝트 설정 - error 는 식별자로 임의의 이름 사용 가능
- 에러가 발생할 가능이 있으면 반드시
try-catch
를 사용해야 합니다.
에러를 일으키는 코드가 try 문 안에 들어가있지 않다면 해당 프로그램은 죽습니다.
하지만 try 문 안에 에러코드가 들어가있다면, 에러가 발생하더라도 프로그램이 죽지 않고 catch 문을 실행합니다.
이것이 try catch 를 사용하는 목적입니다.서버에서 데이터를 가져올 때 통신상에서의 에러가 발생할 확률이 높습니다.
따라서 서버에서 데이터를 가져올 때에는, 즉, 통신을 할 때엔 반드시 try 문에 작성을 해야됩니다.
finally 블록은 예외 발생과 관계없이 실행
var sports; try { sports = ball; } catch (error) { console.log("catch 실행"); } finally { console.log("finally 실행"); } // catch 실행 // finally 실행
- try 에서 에러가 발생하면 catch() 블록을 실행한 후 finally 블록 실행
- try 에서 에러가 발생하지 않더라도 finally 블록 실행
throw
에러를 던지는 것이라고 생각하시면 됩니다.
에러를 던지고 catch 문이 잡는 것입니다.
- 형태 : throw 표현식;
- 명시적으로 예외를 발생시킴
- 예외가 발생하면 catch 실행
try {
throw "예외 발생시킴";
var sports = "스포츠";
} catch (error) {
console.log(error);
console.log(sports);
}
// 예외 발생시킴
// undefined
- throw 표현식에 문자열을 작성한 형태
- throw 를 만나면 에러가 발생하며 catch 블록이 실행됩니다.
throw 아래의 코드는 실행하지 않습니다.
정확히 표현해선 throw 다음 표현식의 세미콜론 이후부턴 실행하지 않습니다.
자바스크립트 엔진은 개행된 시점 기준으로 세미콜론을 자동으로 넣습니다. - catch(error)의 error 에 throw 표현식의 문자열이 설정됩니다.
try {
throw {
msg: "예외 발생시킴",
bigo: "임의의 이름 사용"
}
} catch (error) {
console.log(error.msg);
console.log(error.bigo);
}
// 예외 발생시킴
// 임의의 이름 사용
- throw 표현식에 오브젝트를 작성한 형태
- catch(error) 의 error 에 Error 오브젝트가 설정됩니다.
try {
throw new Error("예외 발생시킴");
} catch (error) {
console.log(error.message);
}
// 예외 발생시킴
- throw 표현식에 Error 오브젝트 작성
Error() 의 파라미터에 메시지 작성
오브젝트의 message 에 메시지가 설정됩니다. - catch(error) 의 error 에 Error 오브젝트가 설정됩니다.
- error.message 로 작성한 메시지 사용
뒤에서 new 연산자를 다루기 때문에 그때 new 연산자에 대해 공부하고 위 예를 다시 보시면 되겠습니다.
일단 간단하게 말씀드리면 new 연산자는 새로운 Object 를 설정합니다.
그 Object 이름이 Error 입니다.
Error 은 자바스크립트에서 제공하는 오브젝트 이름입니다.
Error 의 인자값, 파라미터로 “예외 발생시킴”을 전달하면 Error 오브젝트의 message 에 해당 파라미터 내용이 설정됩니다.