본문 바로가기
C#/Effective C#

[Effective C#] Item48 강력한 예외 보증을 준수하는 것이 좋다.

by 코모's 2023. 6. 12.
반응형

1. 예외에 대한 보증 3가지

1) 기본 보증(basic guarantee)

특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤 리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미 .NET CLR은 기본 보증을 준수한다.

 

2) 강력한 보증(sttong guarantee)

기본 보증에 더하여 예외 발생 시에도 프로그램의 상태가 변겨오디지 않음을 추가로 보증함

 

LINQ 쿼리를 사용하면 기본적으로 강력한 예외 보증 요건을 준수하게 된다.

함수형 프로그래밍 스타일을 사용할 수 없는 경우 방어적인 프로그램을 위해 기존 데이터의 복사본을 유지하고 작업이 완료된 후 값을 교환하는 방법을 사용하면 된다.

(이러한 지침은 변경 불가능한 데이터 구조를 사용한느 것이 좋다)

 

3) 예외 없음보증(no-throw guarantee)

예외가 발생하지 않음을 보증한다.

 

결론

finalizer, Dispose(), when, 델리게이트의 타깃이 되는 메서드 등에서는 어떠한 상황에서도 예외를 발생시켜서는 안된다.

 

반응형