예외 처리는 무엇이고, 왜 필요할까요?
예외 처리는 프로그램에서 예측하지 못 한 실패가 발생했을 때 실패에 대비하기 위한 구조입니다. 예외 처리를 사용하여 우리는 프로그램 실패로 발생할 수 있는 대참사를 막을 수 있습니다.
완벽한 코드, 프로그램은 없기 때문에 사람의 실수로든지 프로그램이 동작하는 환경의 문제로든지 프로그램은 언제나 실패할 수 있습니다. 때문에 우리는 예측할 수 없는 실패에 대비하는 코드를 작성해야 합니다.
어떻게 예외 처리를 할까요?
예외처리를 하는 방법에는 2가지가 있습니다.
- 반환 값으로 실패를 알리는 방법
- 에러 처리 코드를 등록해 두고 실패 시 등록한 코드를 실행시키는 방법
첫 번째 방법은 과거에 많이 사용하던 방법입니다. 이 방법은 반환 값의 의미를 정하고 그에 따라 에러를 처리하는 방식입니다. 예를 들어 개발자가 어떤 함수가 정상적으로 실행되면 0을 반환하고, 실패하면 0이외의 다른 값을 반환하도록 코드를 작성하는 것입니다.
function aaa(){
...
if(동작 실패 조건){
return 1
}
return 0
}
이런 방식에는 몇 가지 문제점이 있습니다.
먼저, 함수를 작성한 개발자 이외 다른 사람은 이 함수의 반환값에 대한 지식을 학습해야 합니다. 값에 대한 의미를 알고 있어야 하고 그 의미가 업데이트되었을 경우 그 변경 사항을 추적할 수 있어야 합니다.
두 번째는 반환 값에 대한 분기 처리로 본래 목적의 코드가 에러 처리 코드에 가려질 수 있다는 것입니다. 예를 들어 각각 에러를 의미하는 반환 값이 있는 함수 세 개를 호출 했을 때 에러 처리를 포함한 코드는 다음과 같이 됩니다.
if (!aaa(1)) {
// 첫번째 함수가 실패했을 때 처리
} else if (!aaa(2)) {
// 두번째 함수가 실패했을 때 처리
} else if (!aaa(3)) {
// 세번째 함수가 실패했을 때 처리
}
두 번째 방법은 이런 문제점들을 극복합니다. 에러 처리 코드를 등록해두고 실패 시 등록한 코드로 점프하는 방식은 현재 주로 사용하는 에러 처리 방식입니다. 이 방식을 사용하면 실패 했을 때 처리하는 코드와 원래 하고 싶은 것을 하는 코드가 분리될 수 있습니다.
try{
aaa(1)
aaa(2)
aaa(3)
}catch(e : Exception){
// 각 함수가 실패했을 때 처리
}
try-catch는 실패할 것 같은 코드를 미리 try로 묶어둔 후 실패했을 때 처리 코드를 실행하는 형식입니다. john good enugh는 실수 가능성을 줄이고 프로그래머가 한 실수를 컴파일러가 경고하도록 하기 위해 2가지 필요하다고 했는데 그중 하나가 try-catch처럼 실패할 것 같은 처리를 묶는 구문입니다.
자바스크립트에서 try-catch는 다음과 같이 사용합니다.
try {
// 실행될 선언들
} catch (exception_var) {
// exception_var : catch블록과 관련된 예외 객체를 담기 위한 식별자
// try 블록과 관련된 예외가 발생했을 때 실행될 선언들
} finally {
// try 선언이 완료된 이후에 실행될 선언들.
// 예외 발생 여부와 상관없이 무조건 실행된다
}
catch와 finally는 생략 가능하지만 한 번에 두 가지 모두를 생략할 수는 없습니다. catch나 finally 중에서 최소 하나는 try와 묶여 사용되어야 합니다.
어떤 경우에 예외 처리가 필요한가요?
예외적인 상황이 발생할 것 같으면 던집니다…. 예…..예외적인 상황이란 무엇인지에 대한 정답은 없다고 합니다.