티스토리 뷰

개발 일기

[개발] 예외 처리에 대한 정리

아이디001 2020. 12. 15. 01:00
728x90

우리는 함수를 작성할 때 수많은 예외와 마주한다.

그렇다면 그러한 예외를 해당 함수에서 다 처리해야할까?


해당 고민에 앞서, 먼저 예외 처리를 하지 않은 함수에 대한 처리 방법에 대해 이야기 해보자.

예를 들어 C 스타일의 문자열을 인자로 받는 함수에서 해당 인자가 널 값이 들어온다면

그 함수는 작동하는 과정에서 에러가 날 것이다.

이러한 에러에 대응하기 위해서는 아래와 같은 2가지 방법이 있다.

1. 널 값이 들어오면 예외 처리해준다.

2. 널 값이 들어올 일이 없다고 가정하고 작성한다.

 

이와 같은 상황에서 나는 대부분 1번과 같은 선택을 했다.

왜냐하면 내가 작성한 모든 함수가 독립적으로 원활하게 작동하기를 원했기 때문이다.

그리고 2번과 같은 선택은 만일의 사태에 대한 처리를 하지 않았기 때문에 좋지 못한 코드라고 생각했다.

 

하지만 2번과 같은 선택이 옳은 상황이 있었고 어쩌면 1번보다 더 예외 처리를 잘한 것이라는 것을 알게 되었다.

그 이유는 만약 내가 작성한 라이브러리 혹은 프로그램이 문자열을 다루기 위한 것인데

그러한 경우 인자로 문자열을 넘기는 경우가 매우 빈번해지고 그때마다 예외 처리를 하는 것은 매우 비효율적이라는 것이다.

 

그렇다면 2번의 경우는 예외 처리를 안하는 걸까? 그건 아니다.

2번의 경우는 자신이 작성한 함수의 인자로는 올바른 값만 들어온다고 가정하고, 처음 들어오는 경계에서 그 값에 대한 유효성 검사를 해주면 되는 것이다.

 

이렇게 작성하면 코드가 매우 간결해져 읽기도 수월해지고, 오류가 발생했을 경우 어디서 문제가 발생했는지 체크하기 수월해진다.

또한 1번과 같이 처리할 경우, 사실상 모든 예외를 처리하는 것은 불가능에 가깝기 때문에 예외가 발생하면 더욱 더 코드의 가독성이 떨어진다.

 

이러한 내용을 공부하고 난 뒤에 든 생각은 나는 2번과 같은 행동이 무조건 잘못된 것이라고 생각했는데, 꼭 그런게 아니고 오히려 좋을 수 있다는 것을 알게되어 충격이였다.

그래서 코드를 작성할 때 어떤 방식으로 작성해야할지 더욱 더 고민해서 선택해야한다는 것을 알았다.

또한 어떠한 선택을 했을 경우 그 선택이 모든 상황에서 정답일 수는 없기 때문에, 장점은 어떤 것이고 단점은 어떤 것인지 명확히 구분지어 정리해야한다고 생각한다.

댓글
최근에 올라온 글
최근에 달린 댓글
링크