본문 바로가기
Language/Javascript

[혼공스] Ch.08 예외 처리

by 노믹 2022. 11. 3.

구문 오류와 예외

  • 구문 오류(syntax error)

프로그램 실행 전에 발생하는 오류입니다.

괄호의 작을 맞추지 않았다든지, 문자열을 열었는데 닫지 않았다든지 할 때 발생합니다.

이러한 구문 오류가 있으면 웹 브라우저가 코드를 분석조차 하지 못하므로 실행 되지 않습니다.

  • 예외(exception) 또는 런타임 오류(runtime error)

프로그램 실행 중에 발생하는 오류입니다.

자바스크립트에서는 SyntaxError라고 출력되는 오류 이외의

모든 오류(TypeError, ReferenceError, RangeError)가 예외로 분류됩니다.

  • 기본 예외 처리

조건문을 사용해서 예외가 발생하지 않게 만드는 것을 말합니다.

  • 고급 예외 처리

try catch finally 구문을 사용해서 예외를 처리하는 방법을 고급 예외 처리라고 부릅니다.

try {
  //예외가 발생할 가능성이 있는 코드
} catch (exception) {
  //예외가 발생했을 때 실행할 코드
} finally {
  //무조건 실행할 코드
  //finally 구문은 필요한 경우에만 사용합니다.
}
  • finally 구문을 사용하는 이유

catch 구문 내부에서 return 키워드를 사용한 경우

catch 구문 내부에서 break 또는 continue 키워드를 사용한 경우

 

예외 처리 고급

  • 예외 객체

try catch 구문을 사용할 때 catch의 괄호 안에 입력하는 식별자가 예외 객체(exception object) 입니다.

아무 식별자나 입력해도 괜찮지만, 일반적으로 e나 exception이라는 식별자를 사용합니다.

try {

} catch (exception) {

}
  • 예외 객체의 속성
속성 이름 설명
name 예외 이름
message 예외 메시지
  • 예외 강제 발생

상황에 따라서 예외를 강제로 발생시켜야 하는 경우도 있습니다.

예외를 강제로 발생시킬 때는 throw 키워드를 사용합니다.

//단순하게 예외를 발생시킵니다.
throw 문자열

//조금 더 자세하게 예외를 발생시킵니다.
throw new Error(문자열)
  • 예외를 강제로 발생시키는 이유

일반적으로 개발할 때는 어떤 사람이 Lodash 라이브러리처럼 다양한 기능을 가진 유틸리티 함수(또는 클래스)를 만들고,

다른 사람들이 그러한 라이브러리의 함수(또는 클래스)를 활용하는 경우가 많습니다.

내가 만든 함수를 내가 사용할 때는 아무 문제없이 사용할 수 있겠지만,

내가 만든 함수를 다른 사람이 사용할 때는 내가 의도하지 않은 형태로 코드를 사용할 수도 있습니다.

이럴 때 예외를 강제로 발생시키면 사용자에게 주의를 줄 수 있으며, 의도한 대로 처리하게 유도할 수도 있습니다.

<script>
  function test (object) {
    console.log(object.a + object.b)
  }

  test({})
</script>

일반적인 프로그래밍 언어라면,

  • object 객체에 a 속성과 b 속성이 없으므로 예외를 발생할 것이고,
  • 존재하지 않는 것을 더하므로 object.a + object.b를 할 때도 예외를 발생합니다.

그러면 사용자는 자신이 잘못 사용했다는 것을 인지하고 수정할 수 있습니다.

 

하지만 자바스크립트는,

  • object.a가 undefined로 나오며, object.b도 undefined로 나옵니다.
  • 여기에서 undefined + undefined를 하면 NaN이 나옵니다.

즉 아무 오류 없이 코드가 정상적으로 실행됩니다.

 

이처럼 자바스크립트는 undefined와 NaN이라는 값이 있어서 다른 프로그래밍 언어에 비해서 예외가 많이 발생하지는 않습니다.

그렇기 때문에 사용자에게 함수를 잘못 사용했다는 것을 강제로라도 인지시켜줄 필요가 있습니다.

 

위의 코드를 안전하게 사용하려면 다음과 같이 예외를 강제로 발생시켜주면 됩니다.

<script>
  function test (object) {
    if (object.a !== undefined && object.b !== undefined) {
      console.log(object.a + object.b)
    } else {
      throw new Error("a 속성과 b 속성을 지정하지 않았습니다.")
    }
  }

  test({})
</script>

'Language > Javascript' 카테고리의 다른 글

Javascript 기본문법  (0) 2022.11.21
[혼공스] Ch.09 클래스  (0) 2022.11.04
[혼공스] Ch.07 문서 객체 모델  (0) 2022.11.03
[혼공스] Ch.06 객체  (0) 2022.11.02
[혼공스] Ch.05 함수  (1) 2022.11.02