Kernel.TypespecError 예외

Kernel.TypespecError 예외

Kernel.TypespecError는 타입 명세(typespec)에 오류가 있을 때 던져지는 예외예요. @type, @spec 같은 타입 정의에 잘못된 타입 이름이 오면 컴파일 시점에 이 예외를 만나요.

예를 들어 존재하지 않는 타입을 참조하면 문제가 생겨요.

@type my_type :: intger()   # 오타: intger는 정의되지 않은 타입

이렇게 하면 다음과 같은 예외가 발생합니다.

** (Kernel.TypespecError) type intger/0 undefined

출처: Kernel.TypespecError

본문

Kernel.TypespecError는 타입 정의에 오류가 있을 때 발생하는 예외입니다. typespec은 Elixir가 타입을 검사하고 문서화하는 데 쓰는 문법이라서, 여기서 실수가 나면 컴파일러가 이 예외로 알려줘요.

이 예외의 공개 필드는 다음과 같아요.

  • :file (t:Path.t/0 또는 nil) — 오류가 발생한 파일. 파일이 아닌 코드에서 발생했다면 nil
  • :line (t:non_neg_integer/0) — 오류가 발생한 줄 번호
** (Kernel.TypespecError) type intger/0 undefined

보통은 함수명 오타, 정의하지 않은 타입 참조처럼 간단한 실수로 발생해요. :file:line이 정확한 위치를 가리키기 때문에 메시지에 나온 줄을 확인하면 어디서 잘못됐는지 바로 보여요.

이 예외는 지금 당장 잘못된 타입을 쓰는 실수를 가장 흔히 만들지만, 모듈을 리팩터링하면서 타입 이름을 옮기거나 지우고도 참조를 남겨두는 경우에도 자주 나타나요. 이때 :file:line이 가리키는 줄을 보면 어떤 타입이 깨졌는지 바로 알 수 있어요.

또한 공개 함수의 @spec에서 파라미터나 반환 타입을 잘못 적은 경우에도 비슷한 오류를 만날 수 있어요. 컴파일러가 정확한 위치를 알려주기 때문에, 메시지가 가리키는 줄을 확인하면 대부분 오타 하나로 끝나요.

더 알아보기

  • Kernel.SpecialForms.@/2: @type, @spec 같은 속성 정의 특수 형식
  • Kernel.Typespec 모듈: typespec을 다루는 공개 API
  • typespec 문서: Elixir 타입 문법 전반에 대한 안내