타입스크립트에서 타입스크립트의 예외 처리 방법은 무엇인가요?
_____A1: 타입스크립트는 자바스크립트 기반이므로 `try...catch...finally` 구문을 사용해 예외를 처리합니다. 예를 들어:
```typescript
try {
// 예외가 발생할 수 있는 코드
} catch (error) {
// 예외 처리 코드
} finally {
// 항상 실행되는 코드 (옵션)
}
```
---
Q2: catch 문에서 에러 객체의 타입은 어떻게 지정하나요?
A2: 타입스크립트 4.4부터 `catch` 변수에 타입을 명시할 수 있습니다. 일반적으로 `unknown` 타입을 쓰며, 필요에 따라 타입 좁히기(type narrowing)를 수행합니다. 예:
```typescript
try {
throw new Error("문제 발생");
} catch (error: unknown) {
if (error instanceof Error) {
console.log(error.message);
}
}
```
---
Q3: 에러 객체를 사용자 정의 타입으로 선언할 수 있나요?
A3: 네, 가능합니다. 예를 들어 사용자 정의 에러 클래스를 만들고 `throw` 할 수 있습니다.
```typescript
class CustomError extends Error {
constructor(message: string) {
super(message);
this.name = "CustomError";
}
}
try {
throw new CustomError("커스텀 에러 발생");
} catch (error: unknown) {
if (error instanceof CustomError) {
console.log(error.message);
}
}
```
---
A4: 타입스크립트는 컴파일 타임에 예외 발생을 엄격히 타입으로 제한하지 않습니다. 즉, 예외 처리를 강제하지 않으며, `try...catch` 사용 여부는 개발자 선택입니다.
---
Q5: async/await 함수 내에서 예외 처리는 어떻게 하나요?
A5: `async` 함수에서도 `try...catch` 구문을 사용해 비동기 작업 중 발생한 예외를 처리합니다.
```typescript
async function fetchData() {
try {
const response = await fetch("url");
const data = await response.json();
return data;
} catch (error: unknown) {
if (error instanceof Error) {
console.error("오류:", error.message);
}
}
}
```
---
Q6: 에러 객체에서 특정 속성에 안전하게 접근하는 방법은?
A6: `unknown` 타입인 `catch` 변수는 직접 속성에 접근할 수 없으므로 `instanceof` 또는 타입 가드로 타입을 좁힌 후 접근합니다.
```typescript
catch (error: unknown) {
if (error instanceof Error) {
console.log(error.message);
} else {
console.log("알 수 없는 에러");
}
}
```
---
Q7: 타입스크립트에서 예외를 던질 때 추천하는 방식은?
A7: 보통 `Error` 클래스를 상속한 사용자 정의 에러 클래스를 만들어 의미 있는 에러 타입을 사용하는 것이 좋습니다. 이를 통해 예외 처리 시 타입 안정성과 가독성을 높일 수 있습니다.
---
요약:
- 예외 처리는 자바스크립트와 동일하게 `try...catch...finally`를 사용.
- `catch` 변수에 대해 타입스크립트 4.4+에서 타입 명시 가능하며 보통 `unknown`으로 선언.
- `instanceof` 등 타입 가드로 에러 타입을 좁힌 후 안전한 접근 권장.
- 사용자 정의 에러 클래스를 만들어 활용 가능.
- 컴파일 타임에 예외 처리를 강제하지는 않음.
- `async/await` 환경에서도 동일하게 `try...catch`로 처리.
타입스크립트에서 예외 처리는 자바스크립트와 유사하게 `try`, `catch`, `finally` 블록을 사용하여 수행됩니다.
하지만 타입스크립트의 강력한 타입 시스템 덕분에 예외 처리 시 더 많은 안전성을 제공할 수 있습니다.
기본적인 예외 처리 구조 타입스크립트에서 예외 처리는 다음과 같은 기본 구조를 따릅니다: ```typescript try { // 예외가 발생할 수 있는 코드 } catch (error) { // 예외 처리 코드 } finally { // 항상 실행되는 코드 } ``` - try 블록 : 예외가 발생할 수 있는 코드를 포함합니다.
이 블록에서 오류가 발생하면, 제어가 catch 블록으로 넘어갑니다.
- catch 블록 : try 블록에서 발생한 예외를 처리하는 코드입니다.
이 블록은 예외 객체를 매개변수로 받아서, 해당 예외에 대한 처리를 수행합니다.
- finally 블록 : 예외 발생 여부와 관계없이 항상 실행되는 코드입니다.
리소스 해제와 같은 작업을 수행하는 데 유용합니다.
예외 처리 예제 아래는 타입스크립트에서 예외 처리를 사용하는 간단한 예제입니다: ```typescript function divide(a: number, b: number): number { if (b === 0) { throw new Error("Division by zero is not allowed."); } return a / b; } try { const result = divide(10, 0); console.log(result); } catch (error) { if (error instanceof Error) { console.error("Error occurred:", error.message); } } finally { console.log("Execution completed."); } ``` 이 예제에서 `divide` 함수는 두 숫자를 나누는 기능을 수행합니다.
만약 두 번째 인자가 0이라면, `Error` 객체를 던집니다.
`try` 블록에서 이 함수를 호출하고, `catch` 블록에서 발생한 오류를 처리합니다.
타입스크립트의 타입 안전성 타입스크립트의 장점 중 하나는 예외 처리 시 타입 안전성을 제공한다는 것입니다.
예를 들어, `catch` 블록에서 `error` 매개변수의 타입을 명시적으로 지정할 수 있습니다.
기본적으로 `catch` 블록의 매개변수는 `any` 타입으로 간주되지만, 타입을 명시적으로 지정하면 더 안전하게 코드를 작성할 수 있습니다.
```typescript try { // ... } catch (error: unknown) { if (error instanceof Error) { console.error(error.message); } else { console.error("Unexpected error:", error); } } ``` 위의 예제에서 `error`의 타입을 `unknown`으로 지정하여, `error`가 `Error` 인스턴스인지 확인한 후에 접근합니다.
이는 타입 안전성을 높이고, 런타임 오류를 줄이는 데 도움을 줍니다.
사용자 정의 예외 타입스크립트에서는 사용자 정의 예외를 생성할 수도 있습니다.
이를 통해 특정 상황에 대한 예외를 명확하게 표현할 수 있습니다.
사용자 정의 예외는 `Error` 클래스를 상속받아 구현할 수 있습니다.
```typescript class DivisionByZeroError extends Error { constructor() { super("Division by zero is not allowed."); this.name = "DivisionByZeroError"; } } function divide(a: number, b: number): number { if (b === 0) { throw new DivisionByZeroError(); } return a / b; } try { const result = divide(10, 0); console.log(result); } catch (error) { if (error instanceof DivisionByZeroError) { console.error("Custom Error:", error.message); } else { console.error("Unexpected Error:", error); } } ``` 이 예제에서 `DivisionByZeroError`라는 사용자 정의 예외를 만들어, 나누기 연산에서 0으로 나누는 경우에 대한 명확한 오류 메시지를 제공합니다.
결론 타입스크립트에서 예외 처리는 자바스크립트와 유사하지만, 타입 시스템 덕분에 더 안전하고 명확한 코드를 작성할 수 있습니다.
`try`, `catch`, `finally` 블록을 사용하여 예외를 처리하고, 사용자 정의 예외를 통해 특정 오류 상황을 명확하게 표현할 수 있습니다.
이러한 기능들은 타입스크립트를 사용하는 개발자에게 코드의 안정성과 가독성을 높이는 데 큰 도움이 됩니다.
작성자:
김유리 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:18
조회수: 129 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 129 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.