Codeit/JavaScript

try catch문

효땡 2024. 8. 9. 17:42

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. 즐거움