try ~ catch ~ finally

sohyeon kim·2022년 3월 19일
0

React & Javascript

목록 보기
9/41

try ~ catch ~ finally

기본적으로 에러 처리를 구현하는 방법은 크게 두 가지가 있다.

if 문이나 단축 평가 또는 옵셔널 체이닝 연산자를 통해 확인하여 처리하는 방법과 에러 처리 코드를 미리 등록해 두고 에러가 발생하면 에러 처리 코드로 점프하도록 하는 방법이 있다.

try ~ catch ~ finally 문은 두 번째 방법이다. 일반적으로 이 방법을 error handling 이라고 한다.

try ~ catch ~ finally 문은 3개의 코드 블록으로 구성된다. finally문은 불필요하다고 생각하면 생략 가능하다.

try {
  // 실행할 코드(에러가 발생할 가능성이 있는 코드)
  foo();
} catch (err) {
  // try 코드 블록에서 에러가 발생하면 이 코드 블록의 코드가 실행된다.
  // err에는 try 코드 블록에서 발생한 Error 객체가 전달된다.
  console.error(err); // ReferenceError: foo is not defined
} finally {
  // 에러 발생과 상관없이 반드시 한 번 실행된다.
}
  • try ~ catch ~ finally 문을 실행하면 먼저 try 코드 블록이 실행된다.

  • try 코드 블록에 포함된 문 중에서 에러가 발생하면 발생한 에러는 catch문의 err변수에 전달되고 cath 코드 블록이 실행된다.

  • catch 문의 error 변수(아무 이름 사용 가능)는 try 코드 블록에 포함된 문 중에서 에러가 발생하면 생성되고 catch 코드 블록에서만 유효하다.

  • finally 코드 블록은 에러 발생과 상관없이 반드시 한 번 실행된다.

  • try ~ catch ~ finally 문으로 예외를 처리하면 프로그램이 강제 종료되지 않는다.


Q. 예외가 try 블럭 안에서 발생하지 않은 경우는?

  • catch 블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행을 계속한다.

Q. 예외가 try 블럭에서 발생한 경우는?

  • 발생한 예외와 일치하는 catch 문이 있는 지 확인하고 일치하는 catch 문이 있다면 catch 블럭 내의 문장을 모두 실행하고 try catch 문을 빠져나가서 그 다음 준장을 수행한다.

  • 일치하는 catch문이 없다면 예외는 처리안되고 에러가 발생한다.


Q. 예외가 try 블럭 밖에서 발생한 경우는?

  • 예외는 아무 처리 되지 못한 채 에러가 발생한다.


참고
모던 자바스클비트 Deep Dive
https://ko.javascript.info/try-catch

profile
slow but sure

0개의 댓글