함수형 프로그래밍에서는 에러 처리가 일반적인 명령형 프로그래밍과는 조금 다릅니다. 함수형 프로그래밍에서는 예외 처리를 통해 에러를 다루는 것이 흔히 사용되는 패턴입니다.
예외 처리는 “try-except” 문을 사용하여 구현할 수 있습니다. 일반적으로 함수형 프로그래밍에서는 예외를 “Either” 데이터 타입을 이용하여 처리합니다. “Either”는 두 가지 가능성 중 하나를 나타내는 타입으로, 예외가 발생하면 “Left” 값으로 결과를 반환하고, 정상적인 결과는 “Right” 값으로 반환하는 방식입니다.
예를 들어, 다음과 같은 함수가 있다고 가정해봅시다:
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
위 함수는 두 개의 숫자를 나누는 함수로, 만약 두 번째 인자가 0이라면 ValueError 예외를 발생시킵니다.
이 함수를 호출하는 코드에서는 try-except
문을 사용하여 예외를 처리할 수 있습니다:
try:
result = divide(10, 0)
print("Division result:", result)
except ValueError as e:
print("Error occurred:", str(e))
위 코드에서는 divide
함수를 호출하고, 결과 값을 변수 result
에 저장합니다. 그러나 만약 ValueError
예외가 발생한다면 except
블록이 실행되고 해당 예외를 처리합니다. 예외 객체의 내용은 str(e)
를 통해 출력되어 사용자에게 보여집니다.
또는, 함수를 수정하여 Either
타입으로 예외를 처리해볼 수도 있습니다:
from typing import Union
def divide(a, b) -> Union[float, str]:
if b == 0:
return "Cannot divide by zero"
return a / b
위의 예제에서는 divide
함수가 float
또는 str
을 반환하는데, float
는 정상적인 결과를 나타내고, str
은 에러 메세지를 나타냅니다. 이렇게 함으로써 호출하는 쪽에서는 함수의 반환 값을 검사하여 어떠한 결과가 반환되었는지 확인할 수 있습니다.
함수형 프로그래밍에서 예외 처리는 이러한 방식으로 이루어집니다. 위의 패턴을 활용하여 에러를 처리하면 코드의 안정성을 향상시킬 수 있습니다.
참고 자료: