[자바스크립트] 구문오류와 예외

박은정·2021년 11월 3일
0

자바스크립트

목록 보기
17/25
post-thumbnail

자바스크립트의 오류

  • 코드가 실행조차 되지 않는 오류
  • 코드 실행 중간에 발생하는 오류

구문오류 syntax error

괄호 개수를 잘못 입력하는 등의 오류로 코드가 실행조차 되지 않는 오류
웹 브라우저가 코드를 분석하지 못하기 때문에 실행되지 않는다

예외 exception (런타임오류 runtiom error)

문법적오류를 제외하고 코드 실행 중간에 발생하는 오류
자바스크립트는 다른 프로그래밍 언어와 비교해서 굉장히 유연하기 때문에 예외를 발생할 가능성이 적은 편이다
대부분의 프로그래밍 언어는 배열의 길이를 넘는 위치를 선택할 경우 오류를 발생하지만 자바스크립트는 undefined 를 출력하기만 한다

예외 처리 exception handling

예외를 처리하는 것

기본 예외 처리

조건문을 사용해서 예외가 발생하지 않게 만드는 것
자바스크립트의 유연함으로 인해 예외가 발생하지 않으면 계속해서 문제를 만들 가능성이 높기 때문에
문제가 발생할 수 있는 부분은 조건문 등으로 처리해줘야 한다

고급 예외 처리

try catch finally 구문

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

try 구문 안에서 예외를 발생하면 catch 구문에서 처리한다
finally 구문은 필수 사항은 아니며, 예외 발생 여부와 상관없이 수행해야 하는 작업이 있을 때 사용한다

try {
  willExcept.byeBye() // 예외발생
} catch (exception) { }

willExcept 자체가 존재하지 않는데 byeBye() 메서드를 사용하기 때문에 예외를 발생해서 종료한다
try 구문 안에서 예외가 발생하면 더 이상 try 구문을 진행하지 않고 catch 구문을 실행한다

try {
  willExcept.byeBye() // 예외발생
  console.log('try 구문의 마지막 줄')
} catch (exception) {
  console.log('catch 구문의 마지막 줄')
} finally {
  console.log('finally 구문의 마지막 줄')
}

try 구문에서 예외가 발생하고 catch 구문이 실행되었다
finally 구문은 try 구문에서의 예외 발생 여부와 상관없이 무조건 실행된다

finally 구문을 사용하는 경우

웹 브라우저에서 사용하는 자바스크립트에서는 사용할 일이 거의 없겠지만
Node.js 처럼 서버로 사용하는 자바스크립트에서는 이러한 내용을 알아야 안전하게 코드를 작성할 수 있다

예외 객체

예외가 발생하면 예외 및 발생된 정보를 확인할 수 있는데
이러한 정보를 확인할 수 있게 해주는 것이 예외 객체 exception object 이다

throw 키워드

자바스크립트는 다른 프로그래밍 언어와 비교해서 대체적으로 예외가 거의 발생하지 않는 프로그래밍 언어이기 때문에 프로그램에서 수많은 버그를 일으킬 수 있는 요소가 될 수 있다
따라서 개발자가 예외를 강제로 발생시켜줘야 하는 경우가 많은데, 예외를 강제로 발생시킬 때 throw 키워드를 사용한다

예외 객체

try catch 구문을 사용할 때 catch의 괄호 안에 입력하는 실별자가 예외 객체이다
아무 식별자를 입력해도 상관은 없지만 일반적으로 e 이나 exception 라는 식별자를 사용한다

예외 객체가 가지고 있는 속성은 브라우저에 따라 조금씩 다르다
모든 웹 브라우저가 공통적으로 가지고 있는 속성을 정리하면

속성이름설명
name예외이름
message예외메시지

자바스크립트를 사용해 데스트톱 또는 모바일 애플리케이션 등을 만든다면
사용자가 애플리케이션을 사용하는 도중 예외가 발생했을 때, 어떤 예외가 발생했는지 예외 객체의 내용을 웹 요청과 메일 등으로 전달받을 수 있게 구현하면 좋다
사용자로부터 받은 예외 객체의 내용을 기반으로 어떤 오류가 발생했는지 확인하고 대처할 수 있다

예외 강제 발생

// 단순하게 예외 발생시킴
throw 문자열

// 조금 더 자세하게 예외 발생시킴
throw new Error

예외를 강제로 발생시키는 이유

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

일반적으로 라이브러리처럼 다양한 기능을 가진 유틸리티 함수나 클래스를 만들고, 다른 사람이 그러한 라이브러리의 함수 또는 클래스를 활용하는 경우가 많은데
내가 만든 함수를 다른 사람이 사용할 때에는 내가 의도하지 않은 형태로 코드를 사용할 수도 있다
이럴 때 강제로 예외를 발생시키면 사용자에게 주의를 줄 수 있으며, 의도한 대로 처리하게 유도할 수도 있다

function text(object) console.log(object.a + object.b)

test({})
// NaN

일반적인 프로그래밍이라면 사용자가 자신이 잘못 사용했다는 것을 인지하고 수정할 수 있지만

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

자바스크립트에서는 아무 오류없이 코드가 정상적으로 실행되기 때문에 인지하지 못하게 된다

  • objext.a 및 object.b 가 undefined로 나온다
  • undefined + undefined 를 하게 되면 NaN 가 나온다

예외를 강제로 발생시키는 예시

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

test({})
profile
새로운 것을 도전하고 노력한다

0개의 댓글