예외 안전성을 추구할 가치가 있는가?

어떻게 이런 질문을 할 수 있을까 한다. "추구할 가치가 있는가?" .. 나는 단연코 추구할 가치가 있다고 생각한다. 여러가지가 있지만, 에러가 한번 터졌다 하면, 어디서 부터 봐야 하는지 난감할 때, 이 때문에 나는 단연코 추구해야 한다고 생각한다.

어느정도 알고 있을 때의 코딩과 그냥 막무가네로 찾아야 하는 코딩은 분명 차이가 있기 때문이다.

이번 항목은 "추구할 가치가 있는가?" 로 생각하는 논쟁에 대해서 정리하는 항목이라 할 수 있겠다.


1 ) Abrahams의 예외 안전성 보장들을 강략히 정의하라.

기본 보장(basic guarantee) : 자원 누수는 일어나지 않으며, 연산 실패된 객체의 파괴가 가능하다는 보장, : 쉽게 말해서 RAII 를 들 수 있겠다.

강한 보장(strong guarantee) : 연산이 실패 하여도, 객체의 상태를 건들이지 않고, 프로그램의 상태를 변화시키지 않는 보장, 쉽게 말한다면, 임시 객체에 작업하고, 나중에 바꾸어 버리는 방법이 여기에 속한다고 할 수 있겠다.

무실패 보장(nofail guarantee) : 이것은 초강력 보장으로, 절대 예외가 발생하지 않는 다는 것을 보장하는 것이다. 어떠한 경우에서건 예외가 발생하지 않는다. 예를 들면, 임시 객체 생성에서 예외가 발생할 순 있지만, 임시 객체에 작업하는 것들은 예외를 발생시키지 않을 수 있다. 또는 작업하는것에 예외는 발생 할 순 있지만, swap할 때, 예외를 발생 시키지 않을 수 있다.


2 ) 다음의 보장들을 위한 코드를 작성할 필요가 있을 때는 언제인가?

(a) 기본 보장

(b) 강한 보장

(c) 무실패 보장

좋은 코딩 하자는데, 안 쓸 필요가 있는가? 다음의 이유를 보면 꼭 쓸 필요가 있다.

1. 예외는 항상 발생 될 수 있다.(.. 요즘 참 많이 느낀다.)

2. 예외에 안전한 코드를 작성하는 것은 프로그래머 자신에게 도움이 된다.(스택이 꼬여서 생긴 오류는 찾기 참 힘들다.)


총평

1. 언제나 무실패 보장을 할 수 있도록 노력 할 것,

2. 생성자, 소멸자, swap 함수에는 예외를 던지지 말 것,

3. 아무리 못해도, 메모리 누수만은 꼭 막을 것


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. 최익필안티 2009.01.13 14:13 신고  Addr  Edit/Del  Reply

    배신자