Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

코드로보시죠

[JavaScript-60] 예외처리 try catch finally구문 본문

[JavaScript] 코드잇과 함께!

[JavaScript-60] 예외처리 try catch finally구문

코드로 보시죠 2023. 10. 1. 23:48

자 일단, 결론부터 말하면, 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

try {

  오류가 발생할 것 같은 부분

} catch(e){

  에러가 발생하면 동작할 코드

} finally {

  에러가 있든 없든 항상 동작할 코드

};

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

의 형태로 자바스크립트의 에러를 관리할 수 있습니다. 

 

특히, 자바스크립트의 여러 에러들 중,

syntaxError를 제외한 에러들을 "예외" 라고 부릅니다. 

이러한 예외들을 관리하는 코드들이라 하여

try catch finally문을 "예외 처리 구문" 이라 부릅니다. 

 

한 가지 눈여겨볼 부분은, 

catch 부분의 파라미터인데요,

지금은 e라고 적어두었지만, 

저 자리는 뭐라고 이름 지어도 상관 없습니다. 

다만, 보통 error, err, e 이렇게 셋 중 하나를 많이 씁니다. 

try문에서 발생한 에러 객체를 받아주는 파라미터의 이름을 지어주는 것이라 생각하시면 됩니다.

 

아직 말로만 설명하다 보니, 

쟤 뭐라는거야 싶으실첸데요.

코드로 함께 살펴보면, 이해가 수월하게 되실 거랍니다!

코드로 보시죠.

function printer({name}){
    try{
    console.log(this.name);
    console.log('에러 없이 종료');
    } catch(e) {
    console.log('에러 발생!', e.name);
    } finally{
    console.log('마지막 코드');
}};

자, 이런 함수가 있다고 해볼게요.

함수는 파라미터로 객체의 name프로퍼티를 가져오고 있죠?

그런데 만약, 함수의 파라미터로 객체가 아닌 값이 전해진다면, 에러가 발생하겠죠?

객체를 받아오겠다고 하고 있는데, 다른 자료형이 들어오면 name이라는 프로퍼티에 접근할 수 없으니까요.

그렇게 되면, 에러가 발생하고, 

에러가 발생하면 프로그램이 멈춰버리죠?

 

그래서, 에러가 발생할 가능성이 있는 코드는 try블록 안에 넣어 두었습니다. 

try문에서 에러가 발생하면, 그 에러 객체는 catch문 파라미터의 e변수로 할당됩니다.

try문에서 에러가 발생하면, try문 내 에러 발생 코드 밑부분은 실행되지 않고, 바로 catch블록이 실행됩니다.

마지막엔 finally부분이 실행되겠죠?

function printer({name}){
    try{
    console.log(this.name);
    console.log('에러 없이 종료');
    } catch(e) {
    console.log('에러 발생!', e.name);
    } finally{
    console.log('마지막 코드');
}};

자, 이 코드를 두고 다시 생각해봅시다.

당연히 지금 코드는 함수를 선언만 해두고 호출하지 않았으니, 

실제로는 아무런 일도 일어나지 않겠지만, 연습삼아 에러가 발생한 경우와 발생하지 않은 경우 화면에 무엇이 출력될지 생각해봅시다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ콘솔 출력 내용ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

(1) 에러 발생 x: 객체의 name프로퍼티 value출력 > 마지막 코드(finally문)

(2) 에러 발생 o: 에러 발생 > 마지막 코드(finally문)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

주의할 점은, 에러가 발생하면, try블록 내에서 에러 발생 코드 밑부분은 실행이 되지 않는다는 점!

즉, 에러 발생시 "에러 없이 종료" 부분은 출력되지 않겠죠?!