try ~ catch, finally

huni_·2022년 7월 1일
0

Backend 컴퓨터에 문제가 발생할 수도 있고, 내가 수정하려는 게시물이 갑자기 삭제가 되는 바람에 수정에 문제가 발생하는 등 여러가지 실패 가능성이 있습니다.

따라서, 우리는 성공에 대한 처리, 실패에 대한 처리를 나누어 작업해야 합니다.

기본적으로 에러 처리를 구현하는 방법은 크게 두 가지가 있다. querySelector나 Array#find 메서드처럼 예외적인 상황이 발생하면 반환하는 값(null 또는 -1)을 if문이나 단축 평가 또는 옵셔널 체이닝 연산자를 통해 확인해서 처리하는 방법과 에러 처리 코드를 미리 등록해 두고 에러가 발생하면 에러 처리 코드를 점프하도록 하는 방법이 있다.

try ... catch ... finally 문은 두번째 방법이다. 일반적으로 이 방법을 에러 처리 라고 한다. try ... catch ... finally 문은 다음과 같이 3개의 코드 블록을 구성된다. finally 문은 불필요하다면 생략가능하다. catch 문도 생략 가능하지만 catch문이 없는 try문은 의미가 없으므로 생략하지 않는다.

try {
//실행할 코드 (에러가 발생할 가능성이 있는 코드)
} catch (err) {
//try 코드 블록에서 에러가 발생하면 이 코드 블록의 코드가 실행된다.
//err에는 try 코드 블록에서 발생한 Error 객체가 전달된다.
} finally {
//에러 발생과 상관없이 반드시 한 번 실행된다. 
}

try ... catch ... finally 문은 실행하면 먼저 try 코드 블록이 실행된다. 이때 try 코드 블록에 포함된 문 중에서 에러가 발생하면 발생한 에러는 catch 문의 err 변수에 전달되고 catch 코드 블록이 실행된다. catch 문의 err 변수(변수 이름은 무엇이든 상관없다)는 try 코드 블록에 포함된 문 중에서 에러가 발생하면 생성되고 catch 코드 블록에서만 유효하다. finally 코드 블록은 에러 발생과 상관없이 반드시 한 번 실행된다. try ... catch ... finally 문으로 에러를 처리하면 프로그램이 강제 종료 되지 않는다.

try {
	//실행할 코드(에러가 발생할 가능성이 있는 코드)
	foo();
} catch(err) {
	//try 코드 블록에서 에러가 발생하면 이 코드 블록의 코드가 실행된다.
	//err에는 try 코드 블록에서 발생한 Error 객체가 전달된다.
  	// 경고창(실패했습니다.)  ==>  백엔드 개발자가 보내주는 실패 메시지
	console.error(err); // ReferenceError: foo is not defined
} finally {
	//에러 발생과 상관없이 반드시 한 번 실행된다.
	// 성공, 실패 여부와 상관없이 무조건 마지막에 실행되는 부분
	// 필요없다면 생략 가능
	console.log('finally')
}
//try...catch...finally 문으로 에러를 처리하면 프로그램이 강제 종료되지 않는다.
console.log('[End]')
profile
FrontEnd Developer

0개의 댓글