예외 처리란 ?
- 프로그램을 실행하다가 문제가 발생하면 프로그램은 실행을 멈추게 된다. 따라서 발생할 수 있는 문제를 미리 고려해서 처리해 주는 것을 예외 처리 라고 한다.
- 예외 처리를 해주면 오류가 발생해서 프로그램이 중단되는 것을 방지할 수 있다.
예외 처리를 하지 않은 경우
//🔥 현재 hello라는 함수를 정의하지 않은 상태에서 호출을 했으므로 에러가 발생할 것이다.
//🔥 그러면 hello()다음에 있는 console.log('end')는 실행되지 못한다.
console.log('start')
hello()
console.log('end')
예외 처리 방법
1. try, catch, finally 문
- try, catch, finally문은 모두 중괄호 안의 명령을 실행 하게 된다.
- try 블록 에서는 실행할 명령을 작성하고, catch 블록 에서는 try 블록에서 에러가 발생 하면 실행할 명령을 작성한다.
- try문에서 에러가 발생하면 catch 블록에 error 객체가 전달 된다.
//😀 add라는 함수서 선언되지 않은 상태에서 호출되었기 때문에 catch문에 error객체가 전달 된다.
try {
add()
}catch (error) {
console.log('error',error)
console.log('name', error.name)
console.log('des', error.message)
}
//🔥 error 객체
instrument.ts:113 error ReferenceError: add is not defined
at <anonymous>:2:5
//🔥 error 객체 안에 있는 name 프로퍼티
instrument.ts:113 name ReferenceError
//🔥 error 객체 안에 있는 message 프로퍼티
instrument.ts:113 des add is not defined
- finally문은 예외가 발생하든, 발생하지 않든 상관 없이 try블록 다음에 실행될 명령을 작성한다.
- finally문은 생략이 가능한데 사용하게 된다면 아래의 형태를 띈다.
try {
실행할 코드
} catch (error) {
try에서 error가 발생 했을 때 실행할 코드
} finally {
try에서 에러가 발생 하던지 안 하던지 무조건 실행되는 코드
}
- 🔥 이렇게 try, catch, finally문으로 예외 처리를 해준다면 try문에서 에러가 발생하더라도 다음 코드가 실행이 되어 프로그램이 중단되는 것을 방지할 수 있다.
2. throw 문
- try,catch문에서는 에러가 발생하면 catch에 error객체가 전달이 되어 해당 객체에 들어 있는 에러의 이름이나 메세지를 사용하였다.
- throw문을 사용하면 사용자가 직접 예외를 만들면서 에러 메세지를 지정할 수 있다.
- 아래와 같은 형태로 작성한다.
throw 메세지
let obj = {name:'hdh', age:30}
//😀 현재 obj에는 height라는 프로퍼티가 없기 때문에 사용자가 height에 관한 value를 원한다면
//😀 height 프로퍼티가 없다는 메시지를 띄우게 할 것이다.
try {
if(!obj.height) {
throw "height 프로퍼티가 없습니다."
}
} catch (err) {
console.error(err)
}
//🔥 그러면 아래와 같이 메세지가 출력 된다.
height 프로퍼티가 없습니다.
3. throw new Error 문
- throw문은 catch에 오류 메세지만을 전달하지만 throw new Error를 사용하면 try, catch문에서 처럼 error 객체를 전달하게 된다.
try {
if(!obj.height) {
throw new Error("height 프로퍼티가 없습니다.")
}
} catch (err) {
console.error(err)
console.error(err.name)
console.error(err.message)
}
//🔥 err 객체
VM614:6 Error: height 프로퍼티가 없습니다.
at <anonymous>:3:15
(익명) @ VM614:6
//🔥 err 객체의 name프로퍼티는 Error가 된다.
VM614:7 Error
//🔥 err 객체의 message 프로퍼티는 작성한 메세지가 된다.
(익명) @ VM614:7
VM614:8 height 프로퍼티가 없습니다.