Boost.Exception 소개
안녕하세요~ 오늘은 Boost.Exception 에 대해서 간단하게 소개해볼까 합니다. Boost.Exception 이란? Boost.Exception 은 예외 계층을 설계하고 예외 핸들링을 수행할 때 도움을 주는 라이브러리입니다. 제가 Boost.Exception 을 사용하면서 얻을 수 있었던 이점은 다음과 같습니다. 예외가 발생한 시점의 소스파일 이름, 라인 넘버, 함수명을 예외 객체에 쉽고 편하게 담을 수 있습니다. throw std::exception() 대신에 BOOST_THROW_EXCEPTION(std::exception()) 을 사용하면 std::exception 을 wrapping 하는 예외 객체가 만들어지고 그 안에 소스파일 이름, 라인 넘버, 함수명이 담깁니다. 나중에 diagnostic_information() 혹은 current_exception_diagnostic_information() 을 통해 예외 정보를 출력하면 소스파일 이름, 라인 넘버, 함수명 정보가 같이 출력됩니다. 이러한 정보는 나중에 문제의 원인을 파악할 때 매우 큰 도움이 됩니다. 예외 객체의 타입과 예외 객체에 담기는 정보의 종류가 서로 decoupling 됩니다. 즉, 임의 타입의 예외 객체에 임의 타입의 정보를 담을 수 있습니다. 예외 클래스 계통은 어떤 종류의 예외인지를 구분하는 tag 로서 설계하고, 예외 객체를 throw 하는 시점에 throw 측에서 담을 수 있는 임의의 정보들을 임의 타입의 예외 객체에 집어넣을 수 있습니다. 공식문서의 Motivation 문서 를 읽어보시면 좋을 것 같습니다. BOOST_THROW_EXCEPTION() BOOST_THROW_EXCEPTION(~~~) 를 사용하면 ~~~ 을 wrapping 하는 예외 객체를 만든후 그 안에 소스파일 이름, 라인 넘버, 함수명을 담아서 throw 하게 됩니다. # include <iostream> # include ...