본문 바로가기
Web/JavaScript

[JavaScript] 예외처리 - try~catch~finally, throw문

by coding-choonsik 2023. 4. 20.
728x90
반응형
SMALL

1. 예외처리

  • 예외가 발생할 수 있는 코드를 try 블록으로 감싸고, 예외 발생 시 처리할 코드를 catch 블록에서 정의
try {
    예외가 발생할 것으로 예상되는 문장
    ...
    ...
}catch(error 객체){
    예외가 발생했을 때 처리할 문장
    ...
    ...
}finally{
    예외와 관계없이 무조건 실행할 문장
}

1-1. try 블록

  • 예외가 발생할 수 있는 코드를 작성하는 블록
  • 이 블록 내에서 예외가 발생하면, JavaScript 엔진은 즉시 실행을 중단하고 catch 블록으로 이동

 

1-2. catch 블록

  • 예외가 발생했을 때 처리할 코드를 작성하는 블록
  • 이 블록은 예외 객체를 인자로 받고, 이 객체에는 예외에 대한 정보가 포함

 

1-3. finally 블록

  • 선택적으로 실행될 코드 블록
  • 이 블록은 try 블록이나 catch 블록에서 반환되기 전에 항상 실행
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>예외처리</title>
</head>
<body>
    <h2>예외처리</h2>
    <script>
        function readFile(path){
            throw new Error('파일 경로를 찾을 수 없음')
            return '파일경로를 참조하여 파일을 생성함'  // 실행되지 않음
        }

        function processFile(path){
            let content;
            try{
                content = readFile(path);  // 에러발생(throw ~)
            }catch(error){
                console.log(error)
                content = '기본내용'
            }finally{
                console.log('에러의 발생 여부와 관계없이 실행할 문장을 작성했음')
            }
            const result = '결과: ' + content
            return result
        }

        const result = processFile('경로')
        console.log(result)
    </script>
</body>
</html>

 

 

 


✅ 다음과 같이 함수를 작성했을 때 호출되어 출력되는 순서를 예상하여 보자.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>예외처리2</title>
</head>
<body>
    <h2>예외처리2</h2>
    <script>
        function func1(){
            console.log('func1이 호출되었어요!')
            throw new Error('에러발생!')
        }
        function func2(){
            try{
                func1()
            }catch(error){
                console.log('예외처리완료!')
                throw error
            }
        }
        function func3(){
            try{
                func2()
            }catch(error){
                console.log('여기에서 또 예외처리 완료!')
            }
        }
        func3()
        console.log('프로그램이 정상적으로 종료되었습니다.')
    </script>
</body>
</html>

 

결과

 

 

실행원리

 


MDN: try...catch

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/try...catch

 

try...catch - JavaScript | MDN

try...catch 문은 실행할 코드블럭을 표시하고 예외(exception)가 발생(throw)할 경우의 응답을 지정합니다.

developer.mozilla.org

 

728x90
반응형
LIST