예외를 발생시킨다는 것은 응용프로그램 입장에서는 상당히 파괴적인 동작을 요청하는 것과 다르지

않다. 응용프로그램의 제어 흐름이 크게 바뀌기 때문에 수행될 것으로 예상한 작업이 제대로 수행되

지 않을 수 있다. 더 나쁜 것은 예외를 잡는 코드를 작성할 책임이 온전히 개발자에게 있다는 것이다.

예외를 잡은 이후에 어떤 작업을 수행할 수 있을지를 결정하는 과정은 예외 발생 시점에 응용프로그

램이 상태를 얼마나 온전하게 저장하고 있는지와 직접적으로 결부되어 있다. 고맙게도 앞서 C++

커뮤니티에서 안전한 예외 처리 전략을 충분히 고민해준 덕분에 C# 커뮤니티는 이에 대한 부담을

많이 덜 수 있었다. C++ 커뮤니티는 실제로 이에 대해서 수많은 논의를 해왔는데, 톰 카길(Tom

Cargill)의 ‘예외 처리 : 보안에 대한 잘못된 인식’ 부터 시작하여 데이브 에이브람스(Dave Abrahams),

허브 서터(Herb Sutter), 스콧 마이어스(Scott Meyers), 맷 오스턴(Matt Austern), 그레그 콜빈(Greg

Colvin)등이 그 내용을 이어 가면서 C# 응용프로그램에서도 적용이 가능한 최상의 사례들을 만들어

왔다. 예외 처리와 관련된 내용은 1994년부터 2000년에 이르기까지 거의 6년 동안 집중적으로 논의

됐는데, 상당히 어려운 문제임에도 불구하고 지속적으로 논의와 토의가 이어졌다. 이에 C# 커뮤니티

는 이들이 앞서 노력한 결과물을 잘 활용하는 것이 좋겠다.

데이브 에이브람스는 예외에 대한 보증을 기본 보증(basic guarante), 강력한 보증(strong guarantee),

예외 없음 보증(no-throw guarantee) 세가지로 구분하여 정의했다.

허브 서터는 그의 책 [Exceptional C++](Addison-Wesley, 2000) 에서 이 세 가지 예외 보증에 대해서

심도 있게 논의했다. 기본 보증이란 특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤

리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미한다. 이는 예외가