함수형 프로그래밍의 오류 처리 전략 - mustaine80/Scala GitHub Wiki
프로그램 작성에서 오류는 당연하고 피할 수 없는 것이다. 문제는 그것을 어떻게 처리할 것인가이다. 허용 가능한 소프트웨어를 만들기 위해 제시하는 접근 방식은 다음과 같다.
- 오류가 최소화되도록 소프트웨어를 조직화한다.
- 우리가 만들어 낸 오류들을 디버깅과 검사를 통해서 최대한 제거한다.
- 심각하지 않은 오류들만 남아 있는지 확인한다.
(발췌: C++ 로 배우는 프로그래밍의 원리와 실제. 비얀 스트로스트럽)
결국 작성된 프로그램 어딘가에는 오류가 있고 이것은 처리되어야 한다. 오류 처리 전략은 언어마다 다르다. C, Go 같은 언어는 오류를 값으로 처리하며, C++, Java 같은 언어는 예외로 처리한다. 만약 처리되지 않은 오류가 있다면 프로그램은 원하지 않는 결과를 출력한다.
오류를 값으로 처리하건, 예외로 처리하건 이러한 것들은 문맥에 의존적이며, 형식에 안전하지 않다는 문제가 있다.
- 호출자 또는 피호출자가 오류를 처리해야 하는데, 프로그램의 상태(문맥)에 따라 오류 처리가 달라져야 할 수 있다.
- 특정 함수가 오류가 발생할 수 있다는 것을 인지하기 어렵다. C++, JAVA 의 경우에는 예외 발생을 명시함으로서 점검 코드를 강제할 수 있지만, 이 경우 해당 함수에 대한 의존성이 높아지는 문제가 있다. (예외가 변경되면 호출자도 변경) 또한, 예외 지정이 불가능한 고차함수에서는 사용할 수 없다.
위의 단점들을 커버하기 위해 함수형 프로그래밍은 "예외를 던지는 대신 예외적인 조건이 발생했음을 뜻하는 값을 돌려준다."라는 컨셉을 제공한다.
- 예외적인 조건이 발생했을 때 가장 적당한 수준에서 처리되도록 오류 처리를 미룰 수 있게 한다.
- 함수가 항상 답을 내지는 못한다는 점을 반환 형식을 통해 명시적으로 표현한다.
(발췌: 스칼라로 배우는 함수형 프로그래밍. 폴 키우사노 외)