자바스크립트 예외 처리 & Strict 모드 정리
✅ 예외란?
- 예외(Exception): 코드 실행 중 발생하는 런타임 오류
- 오류(Error): 문법적인 잘못으로 발생하는 컴파일 단계 오류 (try/catch로 잡히지 않음)
📌 예외 발생시키기: throw
throw "예외 메시지";
throw 404;
throw new Error("에러 객체 예외 발생!");
문자열, 숫자, Error 객체 모두 예외로 던질 수 있습니다.
📌 예외 처리 구문: try / catch / finally
try {
// 예외 발생 가능 코드
} catch (error) {
console.error(error.name); // 예: "Error"
console.error(error.message); // 상세 메시지
} finally {
console.log("항상 실행됩니다.");
}
| 구성 | 설명 |
|---|---|
try |
예외 발생 가능 코드 블록 |
catch |
예외 발생 시 실행 |
finally |
예외 여부와 관계없이 항상 실행 (선택적) |
✅ 조합 가능: try/catch, try/finally, try/catch/finally
📌 Error 객체
try {
throw new Error("사용자 정의 예외!");
} catch (e) {
console.log(e.name); // Error
console.log(e.message); // 사용자 정의 예외!
}
| 프로퍼티 | 설명 |
|---|---|
name |
예외의 이름 (기본값: "Error") |
message |
예외 메시지 내용 |
🚫 Strict 모드
✅ 정의
"use strict" 선언을 통해 자바스크립트 실행을 더 엄격한 모드(strict mode)로 전환
→ 버그를 조기에 잡고, 암시적인 동작을 금지합니다.
📌 선언 위치
- 전체 스크립트 상단
"use strict";
- 함수 내에서만 적용
function doStrict() {
"use strict";
// 엄격 모드로 동작
}
🚨 Strict 모드의 주요 제약
| 대상 | 제한 내용 |
|---|---|
| 변수 | 선언 없이 사용 ❌ (x = 10 → 오류) |
| 함수 | 중복 매개변수 ❌, 블록 내 선언 제한 |
| 객체 | 읽기 전용 프로퍼티 수정 ❌ |
| 예약어 | eval, with 등 사용 ❌ |
| this | 전역에서 this는 undefined |
| delete | 변수, 함수 삭제 불가 |
📌 예시
"use strict";
x = 10; // ReferenceError: x is not defined
🧪 브라우저 지원
| 브라우저 | 지원 버전 |
|---|---|
| IE | 10 이상 |
| Chrome | 13 이상 |
| Firefox | 4 이상 |
| Safari | 5.1 이상 |
| Opera | 12 이상 |
✅ 실전 팁 요약
| 상황 | 권장 방식 |
|---|---|
| 예외 발생 예상 | try / catch로 안전 처리 |
| 사용자 예외 발생 | throw new Error("...") 사용 |
| 예외 디버깅 | error.name, error.message 활용 |
| 코드 안정성 확보 | "use strict" 도입 (최상단 선언 권장) |
질문 정리
Q1. try 없이 throw만 쓰면 어떻게 되나요?
A: 프로그램이 즉시 중단되고 콘솔에 오류 메시지가 출력됩니다.
Q2. catch 블록의 에러 객체 이름은 반드시 error여야 하나요?
A: 아니요. catch (e)처럼 어떤 이름도 사용 가능하지만 error, err, e가 관례입니다.
Q3. finally는 꼭 써야 하나요?
A: 선택 사항이지만, 리소스 정리 작업에는 매우 유용합니다 (예: 파일 닫기, 로딩 제거 등).
댓글남기기