다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
1. 예외에 대한 보증 3가지
1-1) 기본 보증(basic guarantee)
특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤 리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미. NET CLR은 기본 보증을 준수한다.
1-2) 강력한 보증(strong guarantee)
기본 보증에 더하여 예외 발생 시에도 프로그램의 상태가 변경되지 않음을 추가로 보증함.
LINQ 쿼리를 사용하면 기본적으로 강력한 예외 보증 요건을 준수하게 된다.
함수형 프로그래밍 스타일을 사용할 수 없는 경우 방어적인 프로그램을 위해 기존 데이터의 복사본을 유지하고 작업이 완료된 후 값을 교환하는 방법을 사용하면 된다.
(이러한 지침은 변경 불가능한 데이터 구조를 사용하는 것이 좋다)
1-3) 예외 없음 보증(no-throw guarantee)
예외가 발생하지 않음을 보증한다.
결론
finalizer, Dispose(), when절, 델리게이트의 타깃이 되는 메서드 등에서는 어떠한 상황에서도 예외를 발생시켜서는 안된다.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[47] 사용자 지정 예외 클래스를 완벽하게 작성하라 (0) | 2021.05.13 |
---|---|
[46] 리소스 정리를 위해 using과 try/finally를 활용하라 (2) | 2021.05.13 |
[45] 메서드가 실패했음을 알리기 위해서 예외를 이용하라 (0) | 2021.05.12 |
[44] 바인딩 된 변수는 수정하지 말라 (0) | 2021.05.12 |
[43] 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용하라 (0) | 2021.05.12 |