return new Error vs throw new Error

Universe·2023년 7월 27일
0

선 요약

return new Error
"이 연산이 실패한다면, 실패했을 때 어떻게 대응할지 알려줄게"

throw new Error
"이 연산이 실패한다면, 이 함수를 호출한 코드는 정상적으로 계속 실행할 수 없어.
그러니까 실패했을 때 프로그램의 실행을 종료해줘"

return new Error

return new Error는 함수가 Error 객체를 반환하게 만든다.
함수의 정상적인 흐름속에서, 실패했을 경우에 대한 대처방법을 반환(return) 한다.
반환하는 값은 Error 객체이다.
실패의 가능성을 상정하고 실패했을 경우에 대한 대책을 세우는 방법이라고 할 수 있겠다.

function tryParseInt(value: string): number | Error {
    const result = parseInt(value);
    if (isNaN(result)) {
        return new Error(`Cannot parse "${value}" as integer.`);
    }
    return result;
}

const result = tryParseInt('123abc');
if (result instanceof Error) {
    console.error(result.message);
} else {
    console.log(`Parsed value: ${result}`);
}

throw new Error

throw new Error예외를 발생시킨다.
이 함수를 호출한 코드가 예외를 적절히 처리하지 못한다면 프로그램의 실행 자체를 중단한다.
함수의 흐름 속에서 제어할 수 없는, 그러니까 예상치 못한 오류나 복구가 불가능한 오류가
발생했을 경우를 상정한다.

function parseNumber(value: string): number {
    const result = parseInt(value);
    if (isNaN(result)) {
        throw new Error(`Cannot parse "${value}" as integer.`);
    }
    return result;
}

try {
    const result = parseNumber('123abc');
    console.log(`Parsed value: ${result}`);
} catch (error) {
    console.error((error as Error).message);
}

Summary

throw new Error
예외를 발생.
되어야만 하는 프로그램이 작동하지 않거나, 데이터가 예상치 못한 형식으로 제공될 경우, 이에 해당한다.
오류를 throw하고, 그 오류를 상위 레벨에서 catch하여 로그를 남기고, 적절한 대응을 한다.
throw된 오류는 반드시 어딘가에서 처리되어야 하며, 그렇지 않으면 프로그램이 종료된다.

return new Error
오류를 반환하는 것은 함수의 정상적인 반환 값의 일부
함수의 호출자에게 오류를 확인하고 적절하게 대응할 여지를 준다.

profile
Always, we are friend 🧡

0개의 댓글