이 포스트를 만든 목적
- 그냥
이 포스트의 준비물
- gVim 7.3
- Microsoft Visual C# 2010 Express
참고 서적
- Effective C#
- Exceptional C++ Style
내용
견고한 예외 보증(보장:guarantee)란 무엇인가?
예외 처리를 잘하라는 이야기이다. 다행히도 이미 선구자들이 C++ 에서 견고한 예외 보증기법을 정립시켜 두었다.
어떠한 견고한 예외 보증 기법이 존재하는가?
- 기본 보장 (basic guarantee) - 자원 누수가 일어나지 않는 정도
- 강한 보장 (strong guarantee) - 기본 + 예외가 발생하면, 이전 상태로 되돌리는 정도 (트랜젹션적인 성향 정도)
- 무실패 보장(nofail guarantee) - 예외가 아예 발생하지 않는 정도
C#만 특별히 주의해야 할 것이 있는가?
- Finalizer 에서 예외가 발생하면, 그냥 프로그램이 종료된다. 그래서 무실패 보장을 지원해야 한다.
- Dispose() 에서 예외가 발생하면, 내부적으로 다른 예외를 발생시킨다. 그래서 예외를 확인하는 것이 복잡해진다. 그래서 무실패 보장을 지원해야 한다.
- delegate target 에서 예외가 발생하면, multicast delegate 에 연결된 메서드가 수행되지 않는다. 그래서 무실패 보장을 지원해야 한다.
결론
- Finalizer, Dispose(), delegate target 을 무실패 보장을 해주자.
여담
- 임시객체로 작업하고 swap 하는 게, 제일 좋다. 물론 성능상에 문제가 없다면...
- 샘플 코드가 있으면 좋으련만,
'책 정리 > Effective C#' 카테고리의 다른 글
item 50, ECMA 표준을 익혀라 (0) | 2010.08.31 |
---|---|
item 49, C# 2.0의 주요 특징 (0) | 2010.08.31 |
item 48, 활용할 수 있는 다양한 툴과 리소스에 대해서 알아두라. (0) | 2010.08.31 |
item 47, 안전한 코드가 더 좋다. (0) | 2010.08.29 |
item 46, Interop를 최소화하라 (0) | 2010.08.27 |
item 44, 애플리케이션에 특화된 예외 클래스를 완벽하게 작성하라. (1) | 2010.08.23 |
item 43, reflection을 과도하게 사용하지 말라 (0) | 2010.08.19 |
item 42, reflection을 단순화하기 위해서 attribute를 사용하라 (0) | 2010.08.18 |
item 41, 새로운 구조체보다는 DataSet이 좋다. (0) | 2010.08.15 |
item 40, 적절한 collection 개체를 이용하라 (0) | 2010.08.14 |
최근댓글