예외 필터를 작성할 때 항상 false를 반환하도록 작성하는 것이 이상하게 보일런지 모르지만 이렇게

코드를 작성하는 것이 유용한 예가 있다. catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다

에서 살펴본 바와 같이 예외 필터는 스택 되감기를 수행하기 이전에 호출 스택을 따라가는 작업 과정

에서 수행됨을 염두에 두고 아래 내용을 살펴보기 바란다.

아주 전형적인 예를 우선 살펴보기로 하자. 운용 환경에서 수행되는 응용프로그램은 통상 처리되지

않은 예외를 각 머신에 개별적으로 저장하기도 하고 혹은 한 장소에 모두 취합하기도 한다. 제대로

작성된 응용프로그램이라면 정상적으로 작업이 이뤄지지 않은 경우를 저장해두기 마련이다.

다음의 예를 살펴보자.

public static bool ConsoleLogException(Exception e)
{
		var oldColor = Console.ForegroundColor;
		Console.ForegroundColor = ConsoleColor.Red;
		WriteLine("Error: {0}", e);
		Console.ForegroundColor = oldColor;
		
		return false;
}

이 메서드는 모든 예외의 내용을 콘솔에 출력한다. 이 메서드는 로그 정보를 생성하려는 경우라면

어디서든 사용할 수 있을 것이다. 이제 이 메서드를 사용하기 위해서 try/catch 문에 예외 필터를

사용해보자.

try
{
		data = MakeWebRequest();
}
catch (Exception e) when (ConsoleLogException(e))
{
}
catch (TimeoutException e) when (failures++ <10)
{
		WriteLine("Timeout error: trying again");
}

이 코드를 살펴보면 매우 유용한 패턴을 몇 가지 발견할 수 있다. 첫 번째 catch 문의 예외 필터는 항

상 false 만을 반환한다. 따라서 더 이상 예외가 전파되지 않는다. catch 문은 Exception 예외 타입으로

catch 를 수행하기 때문에 모든 예외를 catch하게 된다. 따라서 어떤 타입의 예외가 발생하더라도

로깅을 수행하게 된다. 첫 번째 catch 문은 Exception 타입을 catch 하는데, 일반적으로 Exception