ClojureScript에서 JavaScript 예외 처리하기
ClojureScript는 JavaScript로 컴파일되기 때문에 런타임에서 발생하는 예외 역시 JavaScript의 Error 객체 형태입니다. 따라서 ClojureScript 코드에서 JavaScript 예외를 잡으려면 기본적으로 제공되는 try/catch 특수 폼(special form)을 사용하면 됩니다. 아래에서 두 가지 대표적인 방법을 살펴보겠습니다.
1. js/Error를 지정하여 잡기
가장 일반적인 방식은 catch 절에 js/Error를 명시하는 것입니다.
(try
(throw (js/Error. "Error occurred"))
(catch js/Error e
e))
여기서 (js/Error. "Error occurred")는 JavaScript의 new Error("Error occurred")와 동일한 동작을 수행합니다. 발생한 예외 객체는 catch 절의 바인딩 변수 e에 담기며, 위 예제에서는 해당 객체를 그대로 반환하고 있습니다.
2. :default로 모든 예외 잡기
JavaScript는 문자열, 숫자 등 어떤 값이든 던질(throw) 수 있다는 독특한 특징이 있습니다. 이처럼 Error 객체가 아닌 값까지 안전하게 처리하려면 :default 키워드를 사용하면 됩니다.
(try
(throw (js/Error. "Error Occurred!"))
(catch :default e
e))
:default는 타입을 가리지 않고 던져진 모든 값을 잡아내므로, JavaScript 생태계와 상호 운용할 때 발생할 수 있는 다양한 예외를 포괄적으로 처리할 수 있습니다.
정리 및 실무 팁
ClojureScript에서 JavaScript 예외를 잡는 방법은 크게 두 가지입니다.
- js/Error 지정: 표준 Error 객체만 대상으로 할 때 사용합니다.
- :default 사용: JavaScript가 던질 수 있는 모든 값(문자열, 숫자 등)까지 포괄적으로 처리할 때 사용합니다.
실무에서는 외부 JavaScript 라이브러리와 연동할 때 :default를 사용하는 편이 더 안전합니다. 또한 잡은 예외를 instance? js/Error e와 같이 검사한 뒤 분기 처리하거나, ex-message, ex-data 등을 활용해 오류 정보를 추출하는 패턴도 널리 쓰입니다. 상황에 맞는 방식을 선택해 견고한 예외 처리 로직을 구성해 보세요.