드디어 기초편 마지막! 중요한 에러 처리에 관해 질문하였다.
// 그동안 자바스크립트에 대한 기초적인 학습을 탄탄히 도와주셔서 감사합니다. 마지막 질문은 에러처리에 대한 것입니다.
1. try-catch 문 2. 에러 객체 사용 3. 사용자 정의 에러 생성 에 대해서 알려주시면 감사하겠습니다.
잘 알려진 사실이지만, 오류는 프로그래밍의 필수 부분입니다.
특히 JavaScript는 다양한 방식으로 오류를 처리할 수 있습니다.
다음 세가지 기법을 논의해보겠습니다: try-catch 문, 에러 객체 사용, 사용자 정의 에러 생성.
1. Try-Catch 문
Try-catch 문은 오류를 "catch"하고 처리하는 방법을 제공합니다.
이 방식을 사용하면, "try" 블록에서 오류가 발생할 수 있는 코드를 실행하고, "catch" 블록에서 오류를 처리합니다.
try {
// 오류가 발생할 수 있는 코드
throw new Error('이 코드 블록에서 오류가 발생했습니다.');
} catch (error) {
// 오류를 처리
console.error(error.message);
}
위의 코드에서 throw new Error('이 코드 블록에서 오류가 발생했습니다.'); 라인은 에러를 발생시킵니다. 발생된 에러는 catch 블록에서 처리됩니다.
2. 에러 객체 사용
JavaScript에서 오류를 나타내는 데는 여러 가지 내장 오류 객체를 사용할 수 있습니다. 이들 중 몇 가지를 살펴보겠습니다.
- Error: 기본 오류 객체로, 다른 모든 오류 객체의 부모입니다.
- RangeError: 숫자 변수가 유효한 범위를 벗어났을 때 발생하는 오류입니다.
- TypeError: 값이 예상된 타입이 아닐 때 발생하는 오류입니다.
- ReferenceError: 존재하지 않는 변수를 참조하려고 시도할 때 발생하는 오류입니다.
이들 오류 객체는 모두 throw 키워드와 함께 사용하여 오류를 발생시킬 수 있습니다.
try {
// 존재하지 않는 변수를 참조하는 오류 발생
console.log(nonExistentVariable);
} catch (error) {
if (error instanceof ReferenceError) {
console.error('참조 오류가 발생했습니다.');
}
}
3. 사용자 정의 에러 생성
때때로 기본 오류 객체만으로는 충분하지 않을 수 있습니다. 이런 경우에는 사용자 정의 오류 객체를 만들어 사용할 수 있습니다.
class CustomError extends Error {
constructor(message) {
super(message);
this.name = "CustomError";
}
}
try {
throw new CustomError('이것은 사용자 정의 오류입니다.');
} catch (error) {
if (error instanceof CustomError) {
console.error(`${error.name}가 발생했습니다. 메시지: ${error.message}`);
}
}
위의 코드에서 CustomError는 Error를 상속받아 사용자 정의 오류 객체를 생성합니다.
이 오류는 다른 오류와 마찬가지로 throw 키워드를 통해 발생시킬 수 있으며, catch 블록에서 instanceof 키워드를 통해 해당 오류가 발생했는지 확인할 수 있습니다.
오류 처리는 프로그램의 안정성과 가독성을 높이는 데 중요한 요소이며, JavaScript에서 제공하는 다양한 오류 처리 기법을 활용하는 것이 중요합니다.
// 여기까지 공부하니 기초는 대충 감이 잡혀가는 느낌이다.
// 실제로 뭘 만들때는 보다 상세한 문법적인 부분이나 전체 구조적인 부분에서 잘 막히고 부족함이 많았다.
// GPT 선생님의 좋은 점은, 당연히 막힐때 물어보면 근사한 해결책을 제시해 준다는 점이다. 하지만 더 훌륭한 점은 대화를 잘 이어간다면 단순 복사 붙여넣기로 끝나는 것이 아니라 내가 어느 부분을 실수했고 모르는지에 대해 정확히 알 수 있게 된다는 점이다.
// 어지간한 개발 공부는 선생님과 함께하면 다 가능할 것 같다.
'javascript' 카테고리의 다른 글
함수형프로그래밍, 렉시컬스코프, 클린코드 (0) | 2024.03.07 |
---|---|
클로저 (0) | 2024.01.20 |
[자바스크립트 31] 모듈 (0) | 2023.06.14 |
[자바스크립트 30] 프로토타입과 상속 3 - 클래스 (0) | 2023.06.14 |
[자바스크립트 29] 프로토타입과 상속 2 - 생성자함수 (0) | 2023.06.14 |