Altruistic Programmer's Blog (KR)

이타주의 프로그래머의 블로그

Archive for the ‘event handler’ tag

이벤트핸들러에서 예외 던지기

with 2 comments

[옛날 블로그 글입니다. 2009.07.25]

콜백함수나 이벤트핸들러에서 무언가 문제가 생겨서 예외를 던지고 싶습니다. 어떻게 해야 할까요?

그냥 예외를 던지면 콜백함수나 이벤트핸들러를 호출해 준 라이브러리로 예외가 날라가는데, 그 라이브러리는 예외를 처리할 수가 없습니다. 왜냐면 그 라이브러리는 누가 호출되는지 모르고 그냥 등록된 함수만 호출한거지요. 그래서 그 예외를 던진 녀석이 누군지도 모르고, 또 몰라야만 하고, 예외가 어떤 타입이며, 무슨 의미인지 알 수가 없습니다.

이런 고민에 자료를 찾아보니 같은 고민을 하신 분이 계시네요.
해결책을 던져주지는 않지만 훌륭한 통찰을 제공해주고 있습니다.
http://se.informatik.uni-oldenburg.de:30000/346/1/callback.pdf

우선 이 문서를 읽고 내린 결론부터 얘기하면

  • 콜백함수나 이벤트핸들러에서는 예외를 내지 않는다 -_-;;
  • 라이브러리가 아닌, 그 예외를 처리할 수 있는 누군가에게 함수호출등으로 예외를 알린다.

문서에서 말하는 훌륭한 통찰이란, 예외가 어디로 던져져야 하는지에 대한 규칙입니다.

  • 예외의 발생으로 (안좋은) 영향을 받는 곳 (“나쁜 뉴스를 숨기지 말아라”)
  • 예외로 인한 나쁜 결과를 벌충할 수 있는 곳 (“네 문제를 도와줄 수 없는 곳에 가져가지 마라”)
  • 재발생을 막기위해 예외의 원인을 제거할 수 있는 곳 (“증상이 아니라 병을 고쳐라”)

관련해서 좋은 아이디어나, 자료 있으시면 알려주세요~

Written by muscly

July 25th, 2009 at 3:20 pm