혼공스
Chapter 08 예외 처리
08-1 구문 오류와 예외
오류의 종류
1. 코드가 실행조차 되지 않는 오류: 구문 오류 (syntax error)
괄호 개수 등을 잘 못 입력하는 등의 오류
2. 코드 실행 중간에 발생하는 오류: 예외(exception) 또는 런타임 오류 (runtime error)
오타 등의 오류
구문오류
Uncaught SyntaxError: ...
예외
Uncaught TypeError: ...
Uncaught ReferenceError: ...
Uncaught RangeError: ...
기본 예외 처리
조건문을 사용해서 예외가 발생하지 않도록 하는 것.
자바스크립트는 다른 프로그래밍 언어와비교해서 굉장히 유연하기 때문에 예외가 발생할 가능성이 적은 편입니다. 예를 들어 대부분의 프로그래밍 언어는 배열의 길이를 넘는 위치를 선택할 경우 오류를 발생하짐나 자바스크립트는 undefined를 출력하기만 합니다.
이런 유연함 때문에 오히려 문제를 발견하기 힘들 수도 있습니다. 따라서 문제가 발생할 수 있는 부분은 조건문 등으로 처리해주어야 합니다.
고급예외 처리
예외를 조금 더 쉽게 잡을 수 있는 기능 try catch finally
기본 형태
try {
// 예외가 발생할 가능성이 있는 코드
} catch (exception) {
// 예외가 발생했을 때 실행할 코드
} finally {
// 무조건 실행할 코드 -> finally 구문은 필요한 경우에만 사용합니다.
}
try {
/**
* 정상이라면 이 코드는 아무런 문제없이 블록의 시작부터 끝까지 실행된다.
* 하지만 경우에 따라 예외가 발생할 수 있다.
* 예외는 throw 문에 의해 직접적으로 발생할 수도 있고,
* 또는 예외를 발생시키는 메서드의 호출에 의해 발생할 수도 있다.
*/
} catch (e) {
/**
* 이 블록 내부의 문장들은 오직 try 블록에서 예외가 발생할 경우에만 실행된다.
* 이 문장들에선 지역 변수 e를 사용하여 Error 객체 또는 앞에서 던진 다른 값을 참조할 수 있다.
* 이 블록에서는 어떻게든 그 예외를 처리할 수도 있고,
* 그냥 아무것도 하지 않고 예외를 무시할 수도 있고,
* 아니면 throw 를 사용해서 예외를 다시 발생시킬 수도 있다.
*/
} finally {
/**
* 이 블록에는 try 블록에서 일어난 일에 관계없이 무조건 실행될 코드가 위치한다.
* 이 코드는 try 블록이 어떻게든 종료되면 실행된다.
* try 블록이 종료되는 상황은 다음과 같다.
* 1) 정상적으로 블록의 끝에 도달했을 때
* 2) break, continue 또는 return 문에 의해서
* 3) 예외가 발생했지만 catch 절에서 처리했을 때
* 4) 예외가 발생했고 그것이 잡히지 않은 채 퍼져나갈 때
*/
}
사용하는 경우의 예시
사용자가 항상 개발자의 생각대로 프로그램을 사용하지 않기 때문이다. 숫자만 입력해야하지만 문자열을 입력하기도 하고, 파일을 업로드하기 전 파일의 이름을 지정하지 않기도 한다.
이럴 때 발생하는 오류를 사전에 방지하는 것은 중요하다. 그런데 개발자가 이러한 오류가 발생할 때마다 프로그램이 종료되는 것을 원치 않을 수 있다. 오류를 무시하고 싶을 수도 있고, 그 오류가 발생 했을 때 수행할 적절한 동작을 직접 정의하고 싶을 수도 있다. 이럴 때 활용하는 것이 try-catch-finally 구문이다.
►finally 구문을 사용하는 이유
???? finally 구문은 그래서 왜 사용하는 거야 ????
!!!! 어떤 오류가 나도 꼭 실행되어야 하는 무언가가 있을때 !!!!
확인문제
1번 문제 - 정답 1번

아예 문법적 오류와 속성 혹은 식별자로 선언하는 경우로 나눠볼수 있습니다.
2번 문제 - 정답 3번
3번 문제 - 정답 3번(?)
try catch 문은 syntax error를 잡지 못한다.
08-2 예외 처리 고급
예외 객체: 예외가 발생했을때 정보를 확인할수 있도록 해주는 것
개발자가 예외를 강제로 발생시켜줘야 하는 경우가 있다.
try {
} catch (exception) {
}
예외객체의 속성
name: 예외 이름
message: 예외 메시지
예외 강제 발생
throw 키워드 : 예외를 강제로 발새시켜야 할때 사용하는 키워드
예외를 강제로 발생시키는 이유는 무엇일까요?
내가 만든 함수를 다른 사람이 사용할 때는 내가 의도하지 않은 형태로 코드를 사용할 수도 있습니다. 이럴 때 예외를 강제로 발생시키면 사용자에게 주의를 줄 수 있으며, 의도한 대로 처리하게 유도할 수도 있습니다.
자바스크립트는 undefined와 NaN이라는 값이 있어서 다른 프로그래밍 언어에 비해서 예외를 많이 발생하지는 않습니다. 그렇기 때문에 사용자에게 함수를 잚소 사용했다는 것을 강제로라도 인지시켜줄 필요가 있다는 것입니다.
확인문제
1번 문제 - 정답 4번
2번 문제 - 정답 1번
3번 문제
나의 예상 결과
try 구문입니다
예외를 강제로 발생시킵니다
예외를 강제로 발생시킵니다
예외를 강제로 발생시킵니다
catch 구문입니다
finally 구문입니다
call stack(?)
throw 와 try catch 문을 같이 쓰지 않는다.
정답
try 구문입니다
catch 구문입니다
finally 구문입니다
콜백함수를 함께 활용하면 그때부터 실행 흐름이 약간 이상해진다(?)
콜백 함수 사용 시 try catch 문 사용 방법
콜백 함수는 아무리 해도 적응이 안됩니다. 타 언어(C, Java, Swift 등..)에서 당연하다 생각되었던 방법들이 하필 Javascript/Typescript에서만 안되면 곤혹스러운데요. 그 중 하나를 소개해드리고자 합니
blog.jell.kr
'Hanghae99' 카테고리의 다른 글
| 221216 TIL 미니프로젝트 1 (0) | 2022.12.17 |
|---|---|
| 221211 WIL 항해99 4주차 (0) | 2022.12.11 |
| 221207 TIL 팀과제 1 (0) | 2022.12.07 |
| 221205 TIL React 숙련주차 1 (0) | 2022.12.05 |
| 221203 WIL 항해99 3주차 (0) | 2022.12.02 |