예외 명세가 가치가 있는가?

이 질문을 전제로 생각한다면, .. 많은 생각들을 할 수 있을 것이다.


1 ) 예외 명세를 위반하면 어떤 일이 생길까? C++ 기능에 깔린 기본적인 근거를 논하라.

내가 알고 있는 것은 예외 명세를 위반시키면, unexpected 핸들러가 호출 되어지게 된다. 인데, MSVC2005 에서 테스트를 해봐도 작동 되지 않는다.

테스트 코드

책에선 unexpected 함수는, 예외 명세가 허용하는 다른것으로 변경 시키거나, terminate 를 호출하여, 프로그램을 끝내는데 사용 된다고 한다.


2 )  다음의 각 함수에 대해, 함수가 어떤 예외를 던질 수 있는지 설명하라.

1 라인, 어떠한 예외도 던질 수 있다.

3 라인, 아무 예외도 던지지 않는다.

5 라인, A나 B만 던진다.



3 ) 예외 명세는 함수 형식의 일부분인가? 설명하라.

함수 형식의 일부분인가? 이 말 뜻이 참 애매한데, 함수 형식을 타입으로 고쳐 쓰면, 함수 타입인가? 라고 볼 수 있겠다. 타입들은 typedef 으로 추가 이름을 줄 수가 있는데, 다음 실험을 통해서, 함수 타입의 일부분인지 알아 보자.



4 ) 예외 명세는 무엇이고, 하는 일은 무엇인가? 엄밀하게 서술하라.

예외 명세는 "무슨 무슨 예외를 던지겠다" 라고 정하는 것이고, 하는 일은, "지정했던 예외만 던지겠다", "컴파일러가 최적화를 수행 할 것이다" 라고 기대를 하지만, ..


1. 지정했던 예외만 던지겠다의 반론

컴파일 타임에 컴파일 에러가 발생하는게 아니라, 실행시점 에러를 발생시키기 때문에, "지정했던 예외만" 던지는것은 보장 할 수 없고, 오히려 .. 불필요한 강요만 하는 꼴이다.

2. 컴파일러가 최적화를 수행 할 것이다의 반론

최적화 수행시, 명세에 나열된 예외가 던저졌는지 정검해야 하므로( 1번의 반론에 의해서 ), 오히려 최적화의 방해만 될 수 있는 꼴이다.

이것 말고도 예외 명세가 하는 일이 미치는 영향에는..

1. 예외 명세가 있는 함수는 인라인이 되지 않는다.

2. 일부 컴파일러들은 최적화에서 예외에 관련된 지식을 전혀 사용하지 않으며, 예외를 던 질 수 없는 경우에도 try / catch 블록을 추가 한다.



5 ) 함수에 대해 예외 명세를 작성할 가치가 있는 때는 언제인가? 왜 작성을 해야 하는가?

가치 없으며 쓸 때 없다. 작성하지 않는다.


총평

이 예외 명세가 최초에 표준에 들어갔던 이유를 보자면, 예외 발생에 있어서, 사용자에게 더 많은 정보를 전달해 주고, 예외에 적절하게 대처하자는 이유였으나, 그 사용이 매우 어렵기 때문에, 좋은 기능이 아니라는 지적이다.

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

댓글을 달아 주세요

  1. 최익필안티 2009.01.14 01:32 신고  Addr  Edit/Del  Reply

    배신자