본문 바로가기
언어/자바스크립트(Java Script)

[자바스크립트] 예외 처리

by 골절문간신배신 2024. 8. 6.

예외처리란?

  • 프로그램에서 문제가 발생하면, 프로그램이 실행을 멈추기 때문에, 소스를 작성할 때부터 발생할 만한 오류를 미리 고려하고 대비하는 것 
* 예외란?
- 문법적인 실수로 발생하는 오류
→ 문법 오류 뒤에 오는 소스는 실행되지 않아서 프로그램이 중단되기도 함
- 프로그램의 작성 의도와 다르게 사용했을 때
→ 이런 상황을 미리 예상해서 처리해 줌

 


try, catch, finally

  • try : 실행할 코드
  • catch : try블록에서 예외가 발생했을 때 실행할 코드
    • catch(err)의 err는 instance
      • err.__proto__ : ReferenceError 등 무언가 나옴
      • err.prototype : undefined 
    • err가 어떤 에러인지 받아오기 때문에, catch문을 여러개 쓸 필요가 없음 (문법적으로도 그럴 수 없음)
  • finally : try 블록 이후에 실행할 코드이며 예외와 상관없이 실행됨
<script>
    try {
        console.log("시작");
        add();
        console.log("실행 중...");
    } catch(err) {
        console.log(`오류 발생 : ${err}`);
    }
    console.log("끝");
</script>

console.error()

  • 콘솔 창에 오류를 표시함
  • 오류가 발생하면 빨간색으로 표시되기 때문에 일반 메세지와 구별됨
  • error 객체는 error.name과 error.message로 구성
<script>
    try {
    	…
    }catch(err) {
        console.error(`오류 발생 : ${err}`);
        console.error(`오류 발생 : ${err.name}`);
        console.error(`오류 발생 : ${err.message}`);
    }  
    …
 </script>

 


throw()

  • 사용자가 직접 예외를 만들고 오류 메시지를 지정
  • throw의 뒤에는 무엇이든 올 수 있으며(문자열, 객체 등등) 이는 catch의 err 인스턴스로 가게 됨
  • throw에 여러개의 값을 넣을 수는 없음 (return 1,2;가 안되는 것 처럼)
    • 단, 구조분해 형태로 사용할 수는 있음!
try{
    throw [1, 2];
}catch([err1, err2]){
    console.log(err1); // 1
    console.log(err2); // 2
}
<!-- 방법 1 -->
<script>
    let json= '{"grade": 3, "age": 25}';
    try {
        let user = JSON.parse(json);
        if (!user.name) {
            throw "사용자 이름이 없습니다.";
        }
    } catch (err) {
        console.error(err);
    }
</script>
 
<!-- 방법 2 -->
<script>
    let json= '{"grade": 3, "age": 25}';
    try {
        let user = JSON.parse(json);
        if (!user.name) {
            throw new Error("사용자 이름이 없습니다.“);
        }
    } catch (err) {
        console.error(err);
    }
</script>

댓글