ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Error handling
    Node.js 입문주차 2023. 10. 31. 15:30

    에러 핸들링이란?

    말그대로 에러를 핸들링 하는것으로 에러란 언제 어디서 존재할 지 모르기에 우리가 에러가 있는지 없는지 있다면 그곳은 어디인지 에러를 핸들링하는 방법이 필요하다.

    추로 Try/catch, throw을 이용하고 Finaily은 에러가 발생했는지 아닌지 여부와 상관없이 실행 할 수 있다.


    Try / catch

     

    가장 큰 특징으로는 에러가 발생해도 프로그램을 멈추지 않고 기록할 수 있다는 것이다. 
    EX)

    const users = ["Lee", "Kim", "Park", 2];

    try {
      for (const user of users) {
        console.log(user.toUpperCase());
      }
    } catch (err) {
      console.error(`Error: ${err.message}`);
    }

    // LEE
    // KIM
    // PARK
    // Error: user.toUpperCase is not a function

    이와 같이 

    FOR 반복문으로 위의 USERS에서 USER들을 반복해서 함수를 돌려 대문자로 표기를 하는 반복문을 사용하는데
    숫자 '2'는 함수를 적용할 수 없으니 ERROR를 CATCT하는 로직이다.

     

    Throw

     

    throw는 즉시 실행 함수로 실행시 함수를 멈춘다는 특직이 있다.

    ex)

    function withdraw(amount, account) {
      if (amount > account.balance)
        throw new Error("잔고가 부족합니다.");
      account.balance -= amount;
      console.log(`현재 잔고가 ${account.balance}남았습니다.`); // 출력되지 않음
    }

    const account = { balance: 1000 };
    withdraw(2000, account);

    // Error: 잔고가 부족합니다.

     

    위와같이 amout,account라는 변수를 갖는 함수에서 amount (뽑으려는 돈)이 account.balance(잔고) 보다 많으면 

    Throw연산자을 이용해서 에러가 발생햇으며 잔고가 부족합니다라는 콘솔을 출력하고 함수실행을 멈춘다.

     

    그렇기에 //잔고가 부족하다는 error문자가 나타나게 된다.

     

     

    Finally

    Finally는 에러가 발생했는지 여부와 상관없이 언제든지 실행된다.

    function errorException(isThrow) {
      try {
        console.log('자원을 할당하였습니다.');
        if (isThrow) throw new Error();
      } catch (error) {
        console.log('에러가 발생했습니다.');
      } finally {
        console.log('자원을 제거하였습니다.');
      }
    }

    errorException(false);
    // 자원을 할당하였습니다.
    // 자원을 제거하였습니다.
    errorException(true);
    // 자원을 할당하였습니다.
    // 에러가 발생했습니다.
    // 자원을 제거하였습니다.

    이와같이 try를 사용하여 istrow라는 변수가 트루이면 에러를 throw하는 로직으로

    만약 이게 false라면 error을 throw하지 않기에 에러 로직의 콘솔은 실행되지 않지만 파이널리의 자원을 제거하였습니다. 하는 콘솔이 뜨게된다.

    이와같이 finally는 에러가 있냐 없냐와는 관계없이 

     

    이렇게 에러가 있던 없던 한번들어온 데이터를 삭제해야하거나 어떤 함수를 무조건 적용해야할 때 파이널리를 사용한다.

     

    ex)

    try 에서는 HTTP연결이 되고 있거나 파일과 같은 특정한 ‘자원’을 가지고 처리할 때가 있습니다. 하지만 해당 ‘자원'을 계속 가지고 있으면, 무의미한 메모리를 차지하게 될 것 이므로 에러 여부와 상관없이 일정 시점에서는 해당 ‘자원'을 삭제 시켜야합니다

     

    'Node.js 입문주차' 카테고리의 다른 글

    package manager  (0) 2023.10.31
    HTTP/ WEB SERVER  (0) 2023.10.31
    Class(클라쓰)  (2) 2023.10.31
    Async, await  (0) 2023.10.31
    동기와 비동기  (0) 2023.10.31
Designed by Tistory.