[48] 강력한 예외 보증을 준수하는 것이 좋다

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

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

1-1) 기본 보증(basic guarantee)

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

 

1-2) 강력한 보증(strong guarantee)

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

 

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

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

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

 

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

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

 

결론

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

 

 

댓글

Designed by JB FACTORY