첫 번째 코드는 try..catch 이후에 코드를 실행하기 위해 finally
를 사용하였습니다.
try {
// 작업..
} catch (err) {
// 에러 핸들링..
} finally {
// 작업 내역 삭제
}
두 번째 코드에서는 try..catch 바로 아래에 작업 내역을 삭제하는 코드를 놓았습니다.
try {
// 작업..
} catch (err) {
// 에러 핸들링..
}
// 작업 내역 삭제
현재 상황은 에러의 유무와 관계없이, 작업 후 초기화
를 해야합니다.
*finally
를 사용하면 이점이 있을까요? 아니면 두 코드 조각은 동일하게 동작할까요?*
차이점은 함수 내부의 코드를 보면 분명해집니다.
try..catch 에 빠져나오게 하는 코드가 있다면 (return
, throw
)함수의 행동이 달라집니다.
function func() {
try {
alert('시작');
return "결과";
} catch (e) {
/// ...
} finally {
alert('초기화!');
}
}
func(); // cleanup!
function func() {
try {
alert('시작');
throw new Error("에러 발생!");
} catch (e) {
// ...
if("에러를 핸들링 할 수 없다면") {
throw e;
}
} finally {
alert('초기화!')
}
}
func(); // cleanup!
이렇게 finally
절을 붙여줘야 초기화
가 보장됩니다. 작업 내역을 초기화
해주는 코드를 단순히 func 의 끝에 붙였다면, 위와 같은 상황일 때 초기화 코드가 실행되지 않습니다.