런타임 패닉

런타임 패닉 (Run-time panics)

프로그램이 실행되는 동안, 배열을 범위를 벗어난 인덱스로 접근하려는 것처럼 정상적으로는 일어나면 안 되는 오류가 나는 경우가 있어요. 이때 Go가 뭘 하는지, 그리고 그 오류가 어떤 형태로 우리에게 전달되는지가 바로 이 섹션의 주제예요.

출처: Go Specification

본문

배열을 범위를 벗어난 인덱스로 접근하려는 시도 같은 실행 오류(execution error)는 내장 함수 panic을 호출한 것과 동등한 런타임 패닉(run-time panic)을 일으켜요. 이때 panic에 넘겨지는 값은 구현이 정의하는 인터페이스 타입인 runtime.Error예요.

그리고 이 runtime.Error 타입은 미리 선언된 인터페이스 타입 error를 만족해요. 즉 runtime.Errorerror 인터페이스가 요구하는 메서드를 이미 갖추고 있다는 뜻이죠.

다만 서로 다른 런타임 오류 조건을 나타내는 정확한 오류 값이 무엇인지는 명세가 따로 정해 두지 않아요. "어떤 오류가 나면 정확히 어떤 에러 값이 오는지"는 구현마다 달라질 수 있다는 점만 알아두면 돼요.

runtime.Error의 선언을 요약한 코드가 바로 아래예요.

package runtime

type Error interface {
	error
	// and perhaps other methods
}

여기서 error 인터페이스를 임베드하고 있죠. 거기에 더해 구현에 따라 추가 메서드가 더 붙을 수도 있어서, 주석에 "and perhaps other methods"라고 적혀 있는 거예요.

더 알아보기

  • Handling panics: recover 같은 내장 함수로 패닉을 다루는 방법
  • Errors: 미리 선언된 인터페이스 타입 error