ITEM 49 :: EFFECTIVE C#


안녕하세요, 49번째 시간입니다. 벌써 하나밖에 안 남았다구요?


이번 챕터는 Catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다, 입니다. 예외 필터란 C#만의 새로운 기능 중 하나입니다. 예외가 발생했을 때 예외 수준에 따라 필터 적용을 시킬 수 있는 기능인데, 얼핏 보면 내부에서 if와 else if로 작성하던 것을 조금 더 가독성 있고 간편하게 바꿔준 기능 같네요.

설명

  1. 이전에는 Catch문의 특성상 예외의 타입에 따라 그에 해당하는 예외만을 잡기 때문에, 응용프로그램의 상태나 객체의 상태 혹은 예외 객체가 가진 속성등을 다루는 코드는 반드시 해당 Catch문 안에 작성해야만 했고, 이로인해 Catch로 잡은 후 분석을 다시 한 후, 예외를 다시 발생시키는 코드를 작성했었다.

  2. 다만, 이러한 방법은 분석의 가시화를 어렵게 하고, 런타임의 추가 비용을 야기한다. 따라서, 어떤 경우 예외로 처리할 것인지를 결정하는 방법으로 예외필터를 사용하면 사후 분석을 더 효과적으로 수행할 수 있고, 런타임 비용 또한 최소화 할 수 있다. 따라서 예외 필터를 사용하여 개발하는 방식을 추구하는 것이 좋다. (예외 필터는 when 절을 사용하여 작성한다)

  3. 이전의 방법은 스택 되감기로 인한 정보의 소실이 굉장히 큰 편이다. 변수의 정보나 프로그램의 정보등이 소실되는 경우가 꽤 있기 때문이다. 예외 필터를 사용하면 모든 정보가 살아있어 이에 대해 접근할 수가 있다!

결론

결론적으로 예외 필터를 이용하여 예외를 잡게 되면, 예외 처리가 반드시 필요한 경우에 한해서만 Catch 문을 수행하도록 코드를 구조화할 수 있으며, 오류에 대한 세부 정보를 잃지 않고 그대로 지킬 수 있다. 예외의 타입 이외의 추가적인 정보를 살펴보고 예외 처리 여부를 결정해야 한다면, 예외 필터를 추가하여 catch문 내로 진입하기 이전에 예외 처리를 수행할지를 사전에 결정할 수 있다.