CodeGym /행동 /Frontend SELF KO /예외 처리

예외 처리

Frontend SELF KO
레벨 36 , 레슨 4
사용 가능

10.1 try...catch 블록

예외 처리란 코드를 더 견고하고 신뢰성 있게 만들어주는 중요한 프로그래밍 기술이야. JavaScript에서는 try, catch, finally 그리고 throw 키워드를 사용해서 예외를 처리할 수 있어. 강의에서는 이 키워드들과 그 문법 및 사용 예제를 다룰 거야.

1. try...catch 블록

try...catch 구조는 try 코드 블록에서 발생하는 에러를 처리하는 데 사용돼. try 블록에서 에러가 발생하면, catch 블록으로 제어가 넘어가고 그곳에서 에러를 처리할 수 있어.

문법:

    
      try {
        // 예외를 발생시킬 수 있는 코드
      } catch (error) {
        // 예외를 처리하는 코드
      }
    
  

예시에서는, JavaScript에서 0으로 나누는 게 에러를 발생시키진 않지만, 만약 다른 에러가 발생했다면 (예를 들어 정의되지 않은 변수에 접근), catch 블록이 그것을 처리할 거야:

JavaScript
    
      try {
        let result = 10 / 0;

        console.log(result);

      } catch (error) {
        console.error('An error occurred:', error);
      }
    
  

10.2. finally 블록

finally 블록은 try 블록에서 예외가 발생했든 안 했든 상관없이 반드시 실행되어야 하는 코드를 실행하는 데 사용돼. finally 블록은 catch 블록 다음에 따라와.

문법:

    
      try {
        // 예외를 발생시킬 수 있는 코드
      } catch (error) {
        // 예외를 처리하는 코드
      } finally {
        // 언제나 실행되는 코드
      }
    
  

예시에서는, This will always execute. 메시지가 에러가 발생했든 안 했든 항상 출력될 거야:

JavaScript
    
      try {
        let result = 10 / 0;
        console.log(result);
      } catch (error) {
        console.error('An error occurred:', error);
      } finally {
        console.log('This will always execute.');
      }
    
  

10. 3. throw 연산자

throw 연산자는 명시적으로 예외를 던지는 데 사용돼. 사용자 정의 에러를 던지는 데 사용할 수 있어.

문법:

    
      throw expression;
    
  

여기서:

  • expression: 예외로 던져질 표현식이나 객체

사용 예시

이 예시에서는, 0으로 나누려고 할 때 에러를 던지고, catch 블록이 그 에러를 처리해:

JavaScript
    
      function divide(a, b) {
        if (b === 0) {
          throw new Error('Division by zero is not allowed.');
        }
        return a / b;
      }

      try {
        let result = divide(10, 0);
        console.log(result);
      } catch (error) {
        console.error('An error occurred:', error.message);
      }
    
  

10.4 확장된 예시와 사용법

예시 1: 여러 예외 처리

때때로 try 블록에서 여러 가지 종류의 에러가 발생할 수 있어. 에러 객체의 속성을 사용하여 각각 다르게 처리할 수 있어.

이 예시에서는 JSON 구문 오류를 다른 가능한 에러와 별도로 처리합니다:

JavaScript
    
      try {
        JSON.parse('{ malformed JSON string }');
      } catch (error) {
        if (error instanceof SyntaxError) {
          console.error('JSON Syntax Error:', error.message);
        } else {
          console.error('Unexpected Error:', error);
        }
      } finally {
        console.log('Parsing attempt finished.');
      }
    
  

예시 2: 중첩된 try...catch 블록

더 세밀한 에러 처리를 위해 중첩된 try...catch 블록을 사용할 수 있어.

이 예시에서 첫 번째 try 블록에서 발생한 에러는 내부 catch 블록에서 처리되고, 그 후 외부 catch 블록에서 다시 처리하기 위해 다시 던져져:

JavaScript
    
      try {
        try {
          let result = divide(10, 0);
          console.log(result);
        } catch (innerError) {
          console.error('Inner catch:', innerError.message);
          throw innerError;
        }
      } catch (outerError) {
        console.error('Outer catch:', outerError.message);
      } finally {
        console.log('Nested try...catch finished.');
      }

      function divide(a, b) {
        if (b === 0) {
          throw new Error('Division by zero is not allowed.');
        }
        return a / b;
      }
    
  

예시 3: finally를 사용해 리소스 해제

finally 블록은 파일 닫기나 네트워크 연결 종료와 같은 리소스를 해제하는 데 유용해.

이 예시에서는 파일 읽기 중 에러가 발생하든 안 하든 항상 파일이 닫힐 거야:

JavaScript
    
      function readFile(filePath) {
        let file;
        try {
          file = openFile(filePath); // 파일을 여는 함수
          // 파일 작업 수행
        } catch (error) {
          console.error('Error reading file:', error.message);
        } finally {
          if (file) {
            closeFile(file); // 파일을 닫는 함수
          }
          console.log('File processing finished.');
        }
      }

      function openFile(path) {
        // 파일 열기 로직
      }

      function closeFile(file) {
        // 파일 닫기 로직
      }

      readFile('path/to/file.txt');
    
  

JavaScript에서 try, catch, finally 그리고 throw를 사용한 예외 처리는 더욱 견고하고 신뢰성 있는 애플리케이션을 만들도록 해줘. 이러한 구조를 이해하고 적절히 사용하는 것은 에러를 효율적으로 관리하고, 리소스를 해제하며, 사용자 경험을 향상시키는 데 도움이 돼.

1
Опрос
객체,  36 уровень,  4 лекция
недоступен
객체
객체
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION