typescript
자바스크립트나 TypeScript를 사용하면서 '에러 처리'는 항상 중요한 주제입니다. 특히 명확한 에러 처리를 위해 종종 내장된
하지만 이렇게 만든 커스텀 에러 클래스를 사용할 때 예상치 못한 문제가 발생하기도 합니다. 대표적인 예로, 열심히 만든 CustomError 클래스가
이번 포스팅에서는 이 문제의 원인인 "프로토타입 체인 문제"에 대해 알아보고, 명쾌한 해결책인
자바스크립트는 프로토타입 기반의 언어로, 객체의 상속 관계를 프로토타입 체인(Prototype Chain)을 통해 정의합니다. 그런데, 일부 자바스크립트 엔진이나 TypeScript 컴파일 환경에서는 내장 클래스를 확장한 객체의 프로토타입 체인이 제대로 연결되지 않는 문제가 발생합니다.
이러한 문제가 발생하면, 우리가 흔히 사용하는
console.log(customError instanceof CustomError)
이 문제를 해결하는 방법 중 가장 간단하고 효과적인 방법이 바로
아래의 예제 코드로 확인해 봅시다.
class CustomError extends Error {
constructor(message: string) {
super(message)
// 프로토타입 체인을 정확하게 설정해주는 핵심 코드
Object.setPrototypeOf(this, new.target.prototype)
}
}
const errorInstance = new CustomError('문제가 발생했습니다!')
console.log(errorInstance instanceof CustomError) // true
console.log(errorInstance instanceof Error) // true
특히, 빈번하게 호출되는 클래스의 생성자에서 이 작업을 수행하면 전체 애플리케이션의 성능이 떨어질 수 있습니다. 따라서 일반적인 클래스 구현에서는 이 메서드를 사용하는 것을 지양하고, 반드시 프로토타입 체인의 정확성이 중요한 에러 클래스와 같이 매우 제한적인 상황에서만 사용하는 것이 바람직합니다.
TypeScript에서 Custom Error를 정의할 때 발생하는 프로토타입 체인 문제를