Ted's Codding study
Error - 구문 본문
JavaScript
Error - 구문 Ted93 2024. 5. 24. 12:27
HTML 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>자바스크립트 예외/오류</title>
</head>
<body>
<script src="exception01.js"></script>
</body>
</html>
1. 구문 오류와 예외
오류(Error, 에러): 부정확하거나 유효하지 않은 동작
- 오류의 종류 : 프로그래밍 언어의 오류(2가지)
- 프로그램 실행 전에 발생하는 "구문 오류"
- 프로그램 실행 중에 발생하는 "런타임 오류(예외)"
- 구문 오류
- 프로그램 코드를 작성할 때 발생하는 오류
- 프로그램의 문법이 언어의 정의된 규칙을 따르지 않을 때 발생
- EX) 괄호를 닫지 않거나, 잘못된 키워드를 사용하는 경우 등 : 구문 자체의 오류가 있으면 웹 브라우저가 코드를 분석 조차 하지 X >> 실행 X
- 런타임 오류(예외)
- 프로그램의 실행 중에 발생하는 오류
- 예측 가능한 비정상적인 조건 또는 예외적인 사건을 의미 : 코드가 순차적으로 실행되다가 오류가 위치하는 부분 이후에는 실행이 중단
- EX) 파일을 찾을 수 없거나, 잘못된 입력이 주어지는 경우, 네트워크 연결 오류 등
2. 구문 오류 예제
SyntaxError 발생 - 구문 오류
- 오류 자체에 어떤 파일의 어느 위치에서 오류가 발생했는지 명시
console.log('=== 구문 오류 예제 ===');
console.log('# 프로그램이 시작되었습니다!');
console.log('괄호를 닫지 않는 실수를 했습니다.';
- 앞에 있던 정상적인 코드들 조차도 실행되지 않음
3. 런타임 오류(예외) 예제
TypeError
- 자바스크립트는 SyntaxError라고 출력되는 오류 이외의 모든 오류가 예외(런타임 에러)로 분류
- ex) TypeError, ReferenceError, RangeError 등
console.log('=== 런타임 오류(예외) 예제 ===');
console.log('@ 프로그램이 시작되었습니다!');
console.rog('log를 rog로 잘못 입력하였습니다.');
console.log('런타임 오류 발생 이후의 코드는 실행되지 X');
- 런타임 에러 이전 코드는 실행되고 이후 코드는 실행되지 않음
4. JS 실행 중 발생하는 예외를 다루는 방법
1) 기본 예외 처리
- 조건문을 사용해서 예외가 발생하지 않도록 지정
- 권장하지 X
- 로직의 복잡성이 증가
- 아래 코드는 권장하지 않는 코드
document.addEventListener('DOMContentLoaded', () => {
const h1 = document.querySelector('h1');
// h1.textContent = '안녕하세요'; // Error - HTML에 h1요소가 존재하지 X
if (h1) {
h1.textContent = '안녕하세요';
} else {
console.log('h1 태그를 추출할 수 없습니다');
}
console.log('다음 문장을 실행합니다');
});
- h1.textContent = '안녕하세요'; 를 실행하면 아래와 같은 에러 발생
- 에러 코드를 주석 처리하고 정상적으로 실행 된다면, 아래와 같이 출력 - 권장하지는 않지만 에러 처리가 잘 작동은 잘 되는 것을 확인
2) 고급 예외 처리
try catch finally 구문
- try: 블록 내에서 실행된 코드는 예외 발생 여부를 감시 예외가 발생하면 즉시 실행이 중단되고 catch 블록으로 제어가 이동
- catch: 예외가 발생했을 때 실행되는 블록 catch 블록에 전달되는 예외 객체를 통해 오류 정보를 얻는 것이 가능
- finally: 예외 발생 여부와 관계없이 try 또는 catch 블록 실행 후 항상 실행 주로 자원을 정리하는 코드(예: 파일을 닫는 등)를 포함
try catch문 사용 전 예시
function riskyOperation() {
// 50% 확률로 예외 발생
if (Math.random() < 0.5) {
throw new Error('Something went wrong!');
}
return 'Operation successful';
}
const result = riskyOperation();
console.log(result);
if문의 조건을 만족하면 아래처럼 에러가 나오면서 어플리케이션이 죽음
if 문을 만족하지 않으면 정상적으로 작동이 됨
try catch문 적용 예시
try {
const result = riskyOperation();
console.log(result);
console.log('try블럭의 마지막 줄');
} catch (e) {
// e: exception
console.log('catch블럭의 마지막 줄');
} finally {
console.log('finally 블럭의 마지막 줄');
}
try 구문에서 정상 작동한 경우
에러가 발생해서 catch 문에서 에러를 캐치한 경우
finally 구문을 사용하는 이유
function test() {
try {
console.log('A 위치입니다.');
throw '예외 강제 발생';
} catch (exception) {
console.log('B 위치입니다.');
return;
}
console.log('C 위치입니다.');
}
try 문에서 강제로 예외를 발생해서 무조건 catch 구문이 실행 되는 코드인데 return을 해준 경우 console.log(’C 위치입니다.’); 라는 해당 코드는 절대 실행 될 수 없는 코드이며 VSCode에서도 코드가 흐리게 처리된 것을 볼 수 있다.
그래서 이 코드를 정상적으로 작동하게 하려면, Finally 구문을 사용해야 한다
아래 코드는 올바르게 수정된 예시
function sample() {
try {
console.log('A 위치입니다.');
throw '예외 강제 발생';
} catch (exception) {
console.log('B 위치입니다.');
return;
} finally {
console.log('C 위치입니다.');
}
}
sample();
노션으로 보고 싶다면?
https://short-echidna-b16.notion.site/Error-3e598d8ff58348ba925583e5a8d81d73?pvs=4
Error - 구문 | Notion
목차
short-echidna-b16.notion.site