이 포스트를 만든 목적

  • 그냥

이 포스트의 준비물

  • 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 하는 게, 제일 좋다. 물론 성능상에 문제가 없다면...
  • 샘플 코드가 있으면 좋으련만,


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기