코드 실행시 에러를 다루는 객체이다. 하위 클래스로 다양한 에러 객체가 존재한다.
Error()
생성자 함수는 일반적으로 Error
객체의 인스턴스를 "반환한다"가 아닌 "던진다(throw)"는 개념을 사용한다. 이것은 Error
객체의 인스턴스가 사용되는 목적이 다른 일반 객체와는 다르기 때문이다. 대부분의 오류는 개발 과정 상에서 발생한다. 그리고 이 오류들은 친절하게도 웹브라우저의 개발자 도구 중의 하나인 개발자 콘솔(console)에서 명확하게 알 수 있다. 사실 Error
객체가 특별히 어떠한 역할을 수행할 일이 있어 보이지 않는다. 그냥 보기 싫은 객체인 것이다.
프로젝트의 규모와 구현 복잡도에 따라 다르겠지만 오류가 발생할 수 있는 원인과 범위는 매우 다양하며 광범위하다. 그래서 프로그램의 모든 오류를 개발 과정 상에서 다 잡아내기는 사실상 어려운 일이다. 기본적으로 내장된 오류는 대부분 개발 과정에서 발생하기에 개발만 완벽하게 마친다면 더 이상의 오류는 없을 것이라는 확신을 하기 마련인데 하지만 오류는 언제든지 발생할 수 있다는 생각이 필요하다. 그리고 최종 제품 출시시 가변적인 환경에서 오류가 발생할 수 있을 것이라 예측된다면 오류에 적극적으로 대처하는 코드를 삽입해야 한다. 출시 후 발생하는 오류는 개발 과정에서 미처 알지 못한 내장된 표준 오류일 수 있고 불안정한 코드로 인한 처리 오류일 수도 있다. 출시 전과 출시 후의 오류에 대처하는 방식이 확연히 다르다. 당연히 출시 후가 더 까다롭다는 것이다. Error
객체는 출시 후 발생하는 오류에 대처하게 하는 선물같은 객체이다.
이제 Error
객체가 왜 다른 객체와 달리 반환이 아닌 던진다(throw
)는 개념을 사용하는지에 대해 알아보자. 앞서 이야기했듯이 제품 출시 후 가변적인 환경으로 인해 표준 오류가 발생할 수도 있는 코드 구간을 예측(또는 보수)해야 한다. 그리고 표준 오류가 아닌 절차 또는 결과에 영향을 미치는 오류가 발생할 수도 있다. 역시 그러한 코드 구간을 예측(또는 보수)해야 한다. 오류가 발생하면 더 이상 동일한 오류가 발생하지 않도록 수정하는 게 기본이지만 계속 오류가 발생할 수 있는 가변적인 환경이라 판단되면 오류를 직접 관리해야 한다. 이때 Error
객체의 역할이 드러나는 데 처음에 Error()
생성자 함수는 반환이 아닌 던진다(throw
)는 개념을 사용한다고 했다. 당연히 던지면 누군가 받아야 하지 않을까? 바로 그 역할을 하는 아주 중요한 구문이 있다. 바로 try...catch
라는 구문이다. try
블럭에 오류가 발생할 수 있는 코드를 포함하면 실제로 오류가 발생할 때 시스템은 발생한 오류에 관한 Error
객체를 생성해 catch
블럭으로 던진다. 만일 표준 오류가 아닌 직접적으로 정의한 오류를 던지고자 한다면 명시적으로 Error
객체를 생성해 던질 수도 있다. 던져진 Error
객체에는 오류에 관한 정보를 가지고 있는 프로퍼티가 있으므로 catch
블럭에서는 던져진 Error
객체를 받아 적절한 조치를 하면 된다.
게으른 개발자에게는 Error
객체를 변방의 존재로 취급하겠지만 견고한 코드를 짜는 데 있어서 대단히 중요한 객체이다. 구지 없어도 되는 코드라 생각하지 말고 적극적으로 try...catch
구문을 생성해서 시스템이 내뱉는 Error
객체를 활용해야 한다.
만약에 try...catch
구문없이 Error
객체를 던지면(throw
) 웹브라우저의 개발자 콘솔(console)에 전송된다.
일반적으로 ECMAScript는 특정 라인에서 내부 표준 오류가 발생하면 그 라인 이후부터 실행되지 않고 중단한다. 웹브라우저의 개발자 콘솔에 빨간색의 오류 메시지를 내보내고는 묵묵답답 멈춰 버린다. try...catch
구문을 사용한다는 것은 오류를 직접 관리하겠다는 선언과 같다. 따라서 시스템은 try
블럭 내의 코드에서 내부 표준 오류가 발생하면 catch
블럭으로 Error
객체를 넘기고 try
블럭 내의 코드만 실행을 중지한다. 그리고 try
블럭 바깥쪽 이후 코드를 계속 실행한다. 만일 try
블럭내의 코드가 try
블럭 바깥쪽 이후 코드와 독립적이라면 특정 처리만 중단하기 때문에 사용자 경험을 좋게 할 수 있다. 물른 catch
블럭에서 오류에 대한 적절한 처리를 하지 않으면 안된다.
사용자 지정 오류를 나타내는 Error
객체를 Error()
생성자 함수로 생성하여 던질수 있다. 명시적으로 생성하지 않아도 try...catch
구문에서 표준 오류가 발생시 Error
객체의 인스턴스가 자동으로 생성되어 던져진다.
Error
객체를 생성하는 생성자 함수이다. 명시적으로 생성되는 것만 아니라 런타임(runtime) 오류가 발생했을 때 시스템에 의해 생성(throw)되기도 한다.
발생한 오류의 구체적인 원인을 나타낸다.
오류가 발생한 파일의 행의 열 번호를 조회한다.
오류가 발생한 파일의 행 번호를 조회한다.
발생한 오류에 대한 설명을 조회한다.
발생한 오류 유형의 이름을 조회한다.
오류가 발생한 지점에서 역으로 추적하여 관련 파일, 관련 함수, 관련 행, 사용 인수 등에 대한 정보를 제공한다.
오류가 발생한 파일의 경로를 조회한다.
Error
객체를 나타내는 문자열을 반환한다.