제일 싫어하는 try 와 catch 이다. 사용해 본적이 별로 없어서인지 친근하지 않을 뿐더로, 알아야 할 것이 산떠미 처럼 쌓여(.. C++ 이 원래 그렇지만 )있으니, 손 댈 때도 조심해야 할 것이다.


1 ) try 블록 이란? 코드를 보자.

이 처럼 throw 를 이용하여 string 도 던지고~, 정수도 던지고, 객체는 다 던질 수 있다.


2 ) 예외에 안전하게 코드를 작성하는 것이, 적절한 장소에 try ~ catch를 작성하는 것에 대해 논하라.

음.. 적절한 장소에 try ~ catch 할 수 있다면, 차라리 예외가 발생되지 않게 하는게 더 좋지 않을까 한다. 어디가 적절한지 알고 있는데, try ~ catch 가 무슨 대수랴~

하지만, 책의 내용을 보면, 이렇게 생각해 봐야 한다고 지적한다.

1. 예외를 언제, 어디서 던지는게 좋을까?

이 질문의 답은 다음 질문의 답과 연결 될 것이다. ① 리턴 값으로 처리 되는것이 아닌, 예외를 던저서 처리 되어야 하는게 무엇이 있는가? ② 예외를 절대 던지지 말아야 하는 것은 어떤 것이 있을까?

2. 예외를 언제, 어디서 처리해야 할까?

이 역시, 질문을 통해 이야기 해보자. ① 예외를 처리하기에 적절한 예외 객체는 무엇이 있을까? ② 예외를 잡아야 하는 코드는 어떤 것이 있을까?

3. 어떤 함수 호출에 의한 예외가 거슬러 올라 온다면, 내 코드는 안전한가?

... 문구를 읽을 때 순간 머리속에서 휙휙 지나가는게 있었는데, 이게 맞는건지 모르겠다.


3 ) try 와 catch를 언제 사용해야 하며, 사용하지 말아야 할 때는 언제인가? 표준 지침의 관점에서 서술 하라.

예외의 발생은, 단 한번의 실행을 갖으며, 중요한 함수에선 예외를 던지고, 소멸자와 delete 에선 절대 예외를 발생시키지 않게 해야 한다고 배웠다.(지금 머리속에 있는 대답들..)

책의 내용을 옮긴다면,

1. 응용 프로그램이나 하위시스템에 대한 전반적인 오류 보고 및 처리 방침을 결정하고, 그것을 유지할 것

2. throw 문은 오류를 검출하긴 하되, 그 자신이 오류를 처리하지는 못하는 곳에 작성할 것

3. try와 catch는 오류를 처리하거나, 해석하거나, 오류 방침에 정의된 경계들을 강제하는데 충분한 지식을 가지고 있는 장소에 작성할 것.


그렇다면 try 와 catch 를 작성하는 이유는 무엇일까?

1. 오류를 났을 경우, 그 오류를 처리하기 위해서

2. 오류를 변환시키기 위해서,

3. 하위시스템 경계나 기타 실행시점 방화벽들에 대해 catch(...)로 나머지 모든 예외들을 잡기 위해서.


총평

이번 항목에서 몇가지 교훈을 안겨 준다.

1. throw 문은 오류를 검출하긴 하되, 그 자신이 오류를 처리하지는 못하는 곳에서 작성할 것

2. 자신의 프로그램에서 예외 처리에 방침을 정하고 명세화 할 것

등을 교훈으로 삼는다.(더 있지만 지금은 이것만 생각 난다. )


책의 내용 중 재미있는 부분이 있는데,

옛 현인이 이런 말을 했다고 한다.

앞장서든지, 따라오든지, 둘 다 아니면 좀 비켜라.

예외 안전성에 빚대어 말한다면,

던지든지(throw), 잡든지(catch), 둘 다 아니면, 좀 비켜라.

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

댓글을 달아 주세요

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

    배신자