[C프로그래밍 스타일 문의] 상위함수에서 오류를 처리할지? 하위 함수에서 오류를 처리할지?
글쓴이: hernian / 작성시간: 화, 2016/01/19 - 11:00오전
안녕하세요
열심히 개발중에 저혼자 고민하는것 보다 많은분들의 의견을 들어보고 싶어서 글을 올립니다.
C언어 개발을 하다보면 하위 함수에서 오류가 발생 시
상위 함수에서 결과를 받아서 처리를 할지.. 하위함수에서 바로 처리하고 프로그램을 종료할지 고민하게 되는데요
무슨말이냐 하면
case1)
상위 함수에서 하위함수의 return값을 받아 처리하는 경우 int main(int argc, char* argv[]) { if(call_issue() != 0){ printf("error\n"); } return 0; } int call_issue(){ //error occur if(error occur){ return 1; } else { return 0; } }
case2)하위함수에서 알아서 처리하고 exit() 하는 경우
int main(int argc, char* argv[]) { call_issue(); return 0; } void call_issue(){ if(error occur){ printf("error \n"); exit(1); } }
문의1) "case1 이나 case2 중 무엇으로 해야지 좀더 효율적이다" 라는 방법론이 있나요?
- 물론 특정 경우에서는 무조건 case1로 해야하는 경우도 있고 case2로 해야하는 경우도 있지만
선택적인 상황이 발생한다면 무엇으로 하시는지?
문의2) 위와같은 코딩에 대한 고민거리들을 정리한 책같은 것이 있나요?
위와같이 문의 드립니다.
감사합니다.
Forums:
함수건 클래스건 기능과 역할 따라 분리하는게
함수건 클래스건 기능과 역할 따라 분리하는게 좋습니다.
한편, 함수건 프로그램이건 입구와 출구를 하나만 놓는게 유지보수 및 관리에 유리합니다.
그런 관점에서 보자면, 함수 내부에서 간단한 에러 처리라면 모를까
프로그램을 종료하는 것과 같은 큰 일을 처리하도록 하는건 별로 바람직해 보이지 않는군요.
(프로그래밍) 디자인 패턴에 관한 책들이 그에 대해 어느정도 도움이 될 것 같고,
거기에 더해 Test Drive Development (TDD)에 관한 책도 읽어두시면 좋을 것 같군요.
답변 감사합니다.
답변 감사드립니다.
디자인패턴은 대부분 객체지향언어를 위주로 쓰여있더라고요
그래서 C 쪽에는 그런 패턴같은것이 없나 해서 여쭤본겁니다.
도움 많이됐습니다.
...
정답이 없는 문제입니다만... 제 취향은
(1) 하위 함수에서 해결할 수 있는 에러 -> 해결하고 리턴한다.
(2) 하위 함수에서는 해결할 수 없지만 상위 함수에서는 해결할 수 있는 에러 -> 에러코드를 리턴하면 호출한 쪽에서 에러처리 담당
(3) 어디서도 해결할 수 없는 에러 -> 어차피 프로그램이 죽어야 하므로 그냥 에러가 난 위치에서 바로 죽는다
3번의 경우 저는 그 자리에서 바로 죽는 걸 선호합니다. 어차피 에러코드를 돌려줘봤자 할 수 있는 일이 없기 때문이죠. 코드를 짜다 보면 엄청나게 많은 종류의 에러가 1번 아니면 3번이 되는데 (2번은 개나소나(?) 쓰는 범용 라이브러리를 만드는 경우가 아니면 생각보다 흔하지 않습니다) 그 경우에 매번 에러코드를 돌려주다 보면 코드만 쓸데없이 복잡해지고 나중에 "나는 에러코드를 돌려줬는데 받는 쪽에서 에러체크를 안하고 그냥 진행하다 맛이가는" 케이스가 반드시 나옵니다.
* 그리고 사족입니다만 ocure라는 단어는 없습니다.
답변 감사드립니다.
이런 occur 였군요 여태 모르고 썼네요.. ㅋㅋ
답변 감사드립니다.
윗분들이 설명을 잘해주셨네요.
함수가 정상적으로 작동하지 않았고, 이를 사용자가 알 필요가 있다면 하위 함수에서 오류 번호를 돌려줘서 사용자에게 알리면 되겠지만 (Ex.로그인)
이래나 저래나 함수가 실패해서 프로그램이 앞으로의 동작을 더 이상 진행할 수 없다면 그냥 대강 알려주고 죽게하면됩니다.
댓글 달기