본문 바로가기
반응형

C#/Effective C#35

[Effective C#] Item 50 예외 필터의 다른 활용 예를 살펴보라 예외필터를 통해 다양한 방법으로 여러가지 기능을 제공할 수 있다. 첫번째로 항상 false만을 반환하여 제한된 타입에 대해서만 로그를 출력할 수 있다. try { data = MakeWebRequest(); } catch (Exception e) when (ConsoleLogException(e)) { } catch (TimeoutException e) when (failures++ < 10) { WriteLine("Timeout error: trying again"); } public static bool ConsoleLogException(Exception e) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleCol.. 2023. 6. 12.
[Effective C#] Item 49 catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다. 예외가 발생한 이후 catch 구문에서 어떠한 조건을 넣으려고 할 때 되도록 if 구문보다 아예 catch에서 when 키워드를 통해 조건을 거는 것이 좋다. var retryCount = 0; var dataString = default(String); while (dataString == null) { try { dataString = MakeWebRequest(); } catch (TimeoutException e) when (retryCount++ < 3) { WriteLine("Operation timed out. Trying again"); Task.Delay(1000 * retryCount); } } 만약 catch 문에서 조건을 걸었을 경우, try 구문에서 있었던 정보들이 사라지거나 클로.. 2023. 6. 12.
[Effective C#] Item48 강력한 예외 보증을 준수하는 것이 좋다. 1. 예외에 대한 보증 3가지 1) 기본 보증(basic guarantee) 특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤 리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미 .NET CLR은 기본 보증을 준수한다. 2) 강력한 보증(sttong guarantee) 기본 보증에 더하여 예외 발생 시에도 프로그램의 상태가 변겨오디지 않음을 추가로 보증함 LINQ 쿼리를 사용하면 기본적으로 강력한 예외 보증 요건을 준수하게 된다. 함수형 프로그래밍 스타일을 사용할 수 없는 경우 방어적인 프로그램을 위해 기존 데이터의 복사본을 유지하고 작업이 완료된 후 값을 교환하는 방법을 사용하면 된다. (이러한 지침은 변경 불가능한 데이터 구조를 사용한느 것이 좋다) 3) 예외 없음.. 2023. 6. 12.
[Effective C#] Item47 사용자 지정 예외 클래스를 완벽하게 작성하라 예외 객체에 포함된 기존 오류 관련 정보를 훼손하지 않으면서도 저수준의 에러 내용을 응용 프로그램 관점으로 재해석한 정보를 예외 객체에 포함 시키고 싶을때 사용자 지정 예외 클래스를 사용할 수 있다. 예외 클래스의 작성 이유 catch 문을 사용하여 예외를 다루는 코드를 작성할 개발자가 각각을 구분해서 서로 다른 작업을 수행할 수 있도록 하기 위함이다. 예외클래스 만들기 1. 개별 예외 클래스의 고유한 책임을 명확하게 규정해야한다. 2. 모든 예외 클래스의 일므은 Exception으로 끝나야 한다. 3. System.Exception 클래스나 혹은 더 적절한 클래스를 상속해서 구현해야 한다. 새로운 예외 클래스를 작성할 때는 반드시 4개의 생성자를 작성해야한다. // 기본 생성자 public Except.. 2023. 6. 12.
반응형