Throwable 인터페이스란?
PHP 7부터 도입된 Throwable 인터페이스는 throw 문으로 던질 수 있는 모든 객체의 기반 역할을 합니다. 여기에는 Error와 Exception 클래스가 모두 포함됩니다.
PHP에서 미리 정의된 에러 및 예외 클래스와 사용자가 직접 정의한 클래스는 각각 Error와 Exception 클래스를 상속받으며, 이 두 클래스 모두 Throwable 인터페이스를 구현하고 있습니다. 즉, Throwable은 PHP 예외 처리 계층 구조의 최상위 인터페이스라고 할 수 있습니다.
인터페이스 선언 구조
Throwable 인터페이스에는 다음과 같은 추상 메서드들이 정의되어 있습니다.
Throwable {
/* 메서드 */
abstract public getMessage ( void ) : string
abstract public getCode ( void ) : int
abstract public getFile ( void ) : string
abstract public getLine ( void ) : int
abstract public getTrace ( void ) : array
abstract public getTraceAsString ( void ) : string
abstract public getPrevious ( void ) : Throwable
abstract public __toString ( void ) : string
}주요 메서드 설명
getMessage()
getMessage(void) : string — 던져진 객체에 연결된 메시지를 문자열로 반환합니다. 예외 발생 시 전달된 오류 내용을 확인할 때 사용합니다.
getCode()
getCode(void) : int — 던져진 객체에 연결된 에러 코드를 정수 형태로 반환합니다.
getFile()
getFile(void) : string — 해당 객체가 생성(던져진)된 파일의 이름을 반환합니다.
getLine()
getLine(void) : int — 객체가 인스턴스화된 소스 코드의 라인 번호를 반환합니다.
getTrace()
getTrace(void) : array — 스택 트레이스(stack trace)를 배열 형태로 반환합니다. 디버깅 시 호출 경로를 분석하는 데 유용합니다.
getTraceAsString()
getTraceAsString(void) : string — 스택 트레이스를 사람이 읽기 쉬운 문자열 형태로 반환합니다.
getPrevious()
getPrevious(void) : Throwable — 이전에 발생한 Throwable 객체를 반환합니다. 이 값은 Exception::__construct()의 세 번째 매개변수로 전달된 것으로, 예외 체이닝(exception chaining)에 활용됩니다.
__toString()
__toString(void) : string — 던져진 객체를 문자열로 표현한 값을 반환합니다. 로그 출력이나 화면에 예외 정보를 표시할 때 유용합니다.
정리
Throwable 인터페이스는 PHP 7의 통합된 에러 처리 모델의 핵심입니다. Error와 Exception을 하나의 인터페이스로 묶어 catch (Throwable $e) 형태로 두 유형을 모두 처리할 수 있게 해주며, 위에서 살펴본 메서드들을 통해 예외의 원인, 위치, 호출 흐름 등을 체계적으로 파악할 수 있습니다.