예외를 사용하지 않을 경우 함수를 호출한 즉시 오류를 확인해야 하는 번거로움이 있다.
따라서, 오류가 발생하면 예외를 던지도록 코드를 짜는 것이 더 좋다.
그래야 논리와 오류 처리 코드가 섞이지 않는다.
Try - Catch - Finally
try
블록에서 무슨 일이 생기든이 catch
블록은 프로그램 상태를 일관성 있게 유지해야 한다.
예외가 발생하는 코드를 짤 때는 웬만하면 try-catch-finally문으로 작성하는 것이 좋다.
사용 예
try {
nonExistentFunction();
} catch (error) {
console.error(error);
// expected output: ReferenceError: nonExistentFunction is not defined
// Note - error messages will vary depending on browser
}
문법
try {
try_statements
}
[catch (exception_var) {
catch_statements
}]
[finally {
finally_statements
}]
미확인 에러를 사용하고, 예외에 의미를 제공한다.
확인된 오류를 던진다면, try catch
구문의 catch
블록에서 throw
를 던져야 한다.
계속해서 새로운 오류를 던지기 위해 throws
절을 추가하게 되면 캡슐화가 깨진다.
console.error
를 사용해서 로깅을 남기고, 오류 메세지에 좀 더 명확한 의미를 담아서 전달한다.
const onSubmit = handleSubmit(async (data) => {
try {
await axios.post('api/user/login/', data);
console.log(data);
} catch (err) {
console.error(err);
}
});
☕️ try/catch
를 썼다면, 그 감싼 코드에 어떤 에러가 발생한지 모른다는 뜻이다. 그러므로 그에 대한 장치를 해둬야 하는게 맞다.
따라서 promise 가 실패한 케이스는 그냥 두는 것보다는 적절한 에러 핸들링을 해주는 것이 더 좋다.
Null을 반환하지도, 전달하지도 말라
메서드에서 null을 반환하고자 하는 유혹이 든다면, 그 대신 예외를 던지거나 특수 사례 객체를 반환하는 것이 좋다.
대다수 프로그래밍 언어는 호출자가 실수로 넘기는 Null을 적절히 처리하는 방법이 없다.
'CS > 클린코드(cleancode)' 카테고리의 다른 글
9장. 단위테스트 (0) | 2022.11.28 |
---|---|
10장. 클래스 - 자바스크립트 클린코드 (0) | 2022.11.20 |
6장. 객체와 자료구조 (0) | 2022.11.06 |
5장. 형식 맞추기 (0) | 2022.10.30 |
3장. 함수 (0) | 2022.10.30 |