try catch문
- 에러를 다루는 문법 중 하나로 사용
try {
// 코드
} catch (error) {
// 에러가 발생했을 때 동작할 코드
}
try {
console.log('에러 전');
const codeit = '코드잇';
console.log(codeit);
codeit = 'codeit';
const language = 'JavaScript';
console.log(language);
} catch (error) {
console.log('에러 후');
}
/*
에러 전
코드잇
에러 후
*/
try catch 활용하기
function printMembers(members) {
for (const member of members) {
try {
for (const member of members) {
console.log(member);
}
} catch (error) {
console.error(err);
alert(`${error.name}가 발생했습니다. 콘솔창을 확인해주세요.`);
}
}
}
const teamA = ['상혜', '혜진', '지혜', '혜선'];
printMembers(teamA);
const codeit = {name: 'codeit'};
printMembers(codeit); // Error
const teamB = ['영훈', '재훈', '종훈', '정훈'];
printMembers(teamB);
실습
평소 퀴즈 풀기를 좋아하는 재훈이는 최근에 배운 자바스크립트로 퀴즈 게임을 개발하고 있었습니다.
일단은 문제를 출력하는 기능부터 개발했는데요. 코드를 테스트하던 중 printQuiz함수에 전달하는 아규먼트가 의도하지 않은 형태로 전달됐을 때, 에러가 발생하면서 프로그램이 멈추는 현상을 바견하게 되었습니다.
에러가 발생하면 어떤 에러인지 확인할 수 있고, 프로그램도 종료되지 않도록 처리하고 싶은데요.
절망에 빠진 재훈이가 희망을 품을 수 있도록 printQuiz함수의 내부를 수정해주세요.
이단은 개발 단계니까 에러가 발생하면, 콘솔에 에러 객체의 이름만 출력되도록 해봅시다.
const quiz1 = {
question: '다음 중 스승의 날과 생일이 같은 인물은 누구일까요?',
example: [ '율곡 이이', '퇴계 이황', '세종대왕', '신사임당'],
answer: 3,
solution: '훈민정음 창제 등 우리나라 문화와 교육 발전에 남긴 업적이 가장 큰 인물이라는 평가와 함께, 이 시대의 스승이 세종대왕처럼 존경받았으면 하는 바람으로 세종대왕의 탄생일이 스승의 날로 지정되었습니다.',
};
const quiz2 = {
question: '다음 중 희노애락에 속하지 않는 것은 무엇일까요?',
example: ['사랑', '기쁨', '즐거움'],
answer: 1,
solution: '희노애락에서의 애를 사랑 애(愛)라고 자칫 오해할 수가 있지만, 희노애락의 애는 슬플 애(哀)입니다. 기쁨은 기쁠 희(喜), 즐거움은 즐거울 락(樂)에 담겨 있습니다.',
};
function printQuiz({ question, example }) {
try {
let exMsg = '';
for (let i = 0; i < example.length; i++) {
exMsg += `${i + 1}. ${example[i]} `;
}
console.log(question);
console.log(exMsg);
} catch (error) {
console.log(error.name);
}
}
// 테스트 코드
printQuiz(quiz1);
printQuiz(1);
printQuiz("");
printQuiz({});
printQuiz(quiz2);
실습 결과
다음 중 스승의 날과 생일이 같은 인물은 누구일까요?
1. 율곡 이이 2. 퇴계 이황 3. 세종대왕 4. 신사임당
TypeError
TypeError
TypeError
다음 중 희노애락에 속하지 않는 것은 무엇일까요?
1. 사랑 2. 기쁨 3. 즐거움
'Codeit > JavaScript' 카테고리의 다른 글
finally 문 (0) | 2024.08.09 |
---|---|
함수와 Destructuring (0) | 2024.08.09 |
Destructuring (구조분해) (0) | 2024.08.09 |
옵셔널 체이닝 (0) | 2024.08.09 |
모던한 프로퍼티 표기법 (0) | 2024.08.09 |