티스토리 뷰
자바스크립트로 코드를 작성하다보면 예외사항을 처리해야 할 때가 있다.
예를들어, 덧셈 기능을 하는 함수에 매개변수로 문자열이 들어온다면 예외를 발생시켜야 한다.
자바스크립트는 문자 + 숫자 연산도 가능하기에 예외처리를 하지 않으면 끔찍한 결과가 나타날 수 있다.3 + 5 = 8
이지만, '3' + 5 = 35
라는 결과가 나온다.
따라서, 예외적인 상황에서는 적절하게 예외를 발생시켜야 할 필요가 있다.
예외는 throw
를 통해 발생시킬 수 있다. 덧셈함수로 예시를 보자.
function add(a, b){
if (typeof a !== 'number' || typeof b !== 'number')
throw '매개변수가 잘못됐어..!'
return a + b
}
이런식으로 throw
를 통해 예외를 발생시키면 그 아래의 코드는 실행되지 않는다.
위 코드를 add('3', 5)
로 실행시켜 보았다.
다음과 같이 에러가 나타나는 것을 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/JRFGB/btro7hdxyDJ/EkwY7MCYD8yRF6Zopno4z0/img.png)
그런데, 에러메세지를 잘 보면 Uncaught라고 나와있다.
우리가 예외를 발생시키는 것은 성공했지만 어디선가 예외에 대한 처리(Catch)를 해주지 않았기 때문이다.
이 상태로라면 예외가 해결되지 못하여 전체 프로그램이 에러로인해 정상적인 작동을 하지 못할 가능성이 있다.
따라서, 다음과 같이 예외를 잡아줘야한다.
예외가 발생할 가능성이 있는 코드를 try-catch
문을 통해 감싸주면 된다.
try {
add("3", 5);
} catch (e) {
console.log(e);
}
이렇게 코드를 작성하면 add함수에서 예외가 발생하더라도 catch문에 잡히고 catch문 내에 있는 로직을 수행하게 된다. 지금은 콘솔로그를 찍었으므로 다음과 같은 메세지가 나온다.
![](https://blog.kakaocdn.net/dn/d1wPGO/btrpdq1lU7u/KWmtukKKkUbKm3gTakNps0/img.png)
예외를 잡아줬기에 이제 Uncaught라는 메세지는 나오지 않는다.
이렇게만 해도 예외처리는 가능하지만 자바스크립트에는 Error객체가 존재한다.
throw할때 에러 객체를 전달해보자.
function add(a, b) {
if (typeof a !== "number" || typeof b !== "number")
throw new Error("매개변수가 잘못됐어..!");
return a + b;
}
이렇게 Error객체를 전달했을 때는 그냥 문자열을 전달했을 때의 결과와 조금 다르다.
![](https://blog.kakaocdn.net/dn/cd7P6f/btro7C2FrNm/0GIkfFJY0AwC9o2ZrnC2lk/img.png)
이렇게 에러가 나타난 위치에 대한 정보를 확인할 수 있다. 디버깅을 위해서는 필수적인 정보들이다.
이러한 정보들의 기록이 가능한 이유는 콜스택에서 에러로 인해 함수가 제거될때 그 정보들을 기록하기 때문이다.
콜스택의 개념을 생각해보자.
가장 상단에 있는 함수에서 Error가 발생 했을 때 상단에 있는 함수가 pop되며 Error가 전달된다.
만약 그 아래에 있는 함수가 에러를 Catch한다면 거기서 멈추게 되지만 Catch하지 않는다면 함수의 로직이 정상적으로 작동하지 않고 계속해서 Error가 전달될 것이다. 그리고 이 때의 정보를 Error객체에 담아 보여주는 것이다.
일반적인 상황에서의 예외처리 방법을 다뤄봤다.
하지만, Promise를 사용하는 비동기 상황에서는 예외처리를 위해 조금 더 생각해보아야 할 부분들이 있다.
이건 다음 포스팅에서 다뤄보겠다.
'Javascript' 카테고리의 다른 글
[JS] 자바스크립트 비동기 예외처리(Promise, async, await) (0) | 2021.12.24 |
---|---|
[JS] 자바스크립트 Promise, async, await (0) | 2021.07.15 |
[JS] 자바스크립트 함수형 접근(functional approach) (0) | 2021.07.13 |
[JS] 자바스크립트 변수선언, scope, hoisting (0) | 2021.07.13 |
[JS] 자바스크립트의 비동기 처리, 이벤트 루프 (0) | 2021.07.13 |
- Total
- Today
- Yesterday
- 동적계획법
- nodeJS
- 알고리즘
- 구현
- nestjs
- 재귀
- 백트래킹
- 그리디
- typeORM
- 예외처리
- 자바스크립트
- 투포인터
- nest.js
- 세그먼트 트리
- 중앙대학교
- 컴퓨터 통신
- dfs
- 그래프
- 벨만포드
- ReactNative
- java
- 스레드
- 자바
- 시뮬레이션
- 백준
- Computer Architecture
- boj
- BFS
- 컴퓨터 구조
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |