10.1 try...catch 블록
예외 처리란 코드를 더 견고하고 신뢰성 있게 만들어주는 중요한 프로그래밍 기술이야. JavaScript에서는 try
, catch
, finally
그리고 throw
키워드를 사용해서 예외를 처리할 수 있어. 강의에서는 이 키워드들과 그 문법 및 사용 예제를 다룰 거야.
1. try...catch 블록
try...catch
구조는 try
코드 블록에서 발생하는 에러를 처리하는 데 사용돼. try
블록에서 에러가 발생하면, catch
블록으로 제어가 넘어가고 그곳에서 에러를 처리할 수 있어.
문법:
try {
// 예외를 발생시킬 수 있는 코드
} catch (error) {
// 예외를 처리하는 코드
}
이 예시에서는, JavaScript에서 0으로 나누는 게 에러를 발생시키진 않지만, 만약 다른 에러가 발생했다면 (예를 들어 정의되지 않은 변수에 접근), catch
블록이 그것을 처리할 거야:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('An error occurred:', error);
}
10.2. finally 블록
finally
블록은 try
블록에서 예외가 발생했든 안 했든 상관없이 반드시 실행되어야 하는 코드를 실행하는 데 사용돼. finally
블록은 catch
블록 다음에 따라와.
문법:
try {
// 예외를 발생시킬 수 있는 코드
} catch (error) {
// 예외를 처리하는 코드
} finally {
// 언제나 실행되는 코드
}
이 예시에서는, This will always execute.
메시지가 에러가 발생했든 안 했든 항상 출력될 거야:
try {
let result = 10 / 0;
console.log(result);
} catch (error) {
console.error('An error occurred:', error);
} finally {
console.log('This will always execute.');
}
10. 3. throw 연산자
throw
연산자는 명시적으로 예외를 던지는 데 사용돼. 사용자 정의 에러를 던지는 데 사용할 수 있어.
문법:
throw expression;
여기서:
expression
: 예외로 던져질 표현식이나 객체
사용 예시
이 예시에서는, 0으로 나누려고 할 때 에러를 던지고, catch
블록이 그 에러를 처리해:
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed.');
}
return a / b;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error('An error occurred:', error.message);
}
10.4 확장된 예시와 사용법
예시 1: 여러 예외 처리
때때로 try
블록에서 여러 가지 종류의 에러가 발생할 수 있어. 에러 객체의 속성을 사용하여 각각 다르게 처리할 수 있어.
이 예시에서는 JSON 구문 오류를 다른 가능한 에러와 별도로 처리합니다:
try {
JSON.parse('{ malformed JSON string }');
} catch (error) {
if (error instanceof SyntaxError) {
console.error('JSON Syntax Error:', error.message);
} else {
console.error('Unexpected Error:', error);
}
} finally {
console.log('Parsing attempt finished.');
}
예시 2: 중첩된 try...catch 블록
더 세밀한 에러 처리를 위해 중첩된 try...catch
블록을 사용할 수 있어.
이 예시에서 첫 번째 try
블록에서 발생한 에러는 내부 catch
블록에서 처리되고, 그 후 외부 catch
블록에서 다시 처리하기 위해 다시 던져져:
try {
try {
let result = divide(10, 0);
console.log(result);
} catch (innerError) {
console.error('Inner catch:', innerError.message);
throw innerError;
}
} catch (outerError) {
console.error('Outer catch:', outerError.message);
} finally {
console.log('Nested try...catch finished.');
}
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed.');
}
return a / b;
}
예시 3: finally를 사용해 리소스 해제
finally
블록은 파일 닫기나 네트워크 연결 종료와 같은 리소스를 해제하는 데 유용해.
이 예시에서는 파일 읽기 중 에러가 발생하든 안 하든 항상 파일이 닫힐 거야:
function readFile(filePath) {
let file;
try {
file = openFile(filePath); // 파일을 여는 함수
// 파일 작업 수행
} catch (error) {
console.error('Error reading file:', error.message);
} finally {
if (file) {
closeFile(file); // 파일을 닫는 함수
}
console.log('File processing finished.');
}
}
function openFile(path) {
// 파일 열기 로직
}
function closeFile(file) {
// 파일 닫기 로직
}
readFile('path/to/file.txt');
JavaScript에서 try
, catch
, finally
그리고 throw
를 사용한 예외 처리는 더욱 견고하고 신뢰성 있는 애플리케이션을 만들도록 해줘. 이러한 구조를 이해하고 적절히 사용하는 것은 에러를 효율적으로 관리하고, 리소스를 해제하며, 사용자 경험을 향상시키는 데 도움이 돼.
GO TO FULL VERSION