C#, Result Pattern 구현
C# Result Pattern은 메서드가 성공 또는 실패(오류) 상태와 관련 데이터를 포함한 객체를 반환하도록 하여, 예외(Exception) 대신 명시적으로 결과를 처리하는 디자인 패턴이다.1
작업의 성공 또는 실패를 명시적으로 반환하여 예외(Exception) 대신 구조화된 객체를 통해 에러를 처리하는 디자인 패턴이다. 주로 함수형 프로그래밍 접근 방식을 활용하여 코드의 가독성, 유지보수성, 예측 가능성을 높이며, ‘성공 시 데이터’와 ‘실패 시 에러 정보’를 하나의 객체로 캡슐화한다.2
이걸 구현하는 비슷한 패키지로는 OneOf가 있지만 오래되었고 좀 더 Customizing 할 수 있게 직접 구현해 보았다. 아래에 전체 소스를 추가하였다.
활용 예제
1
2
3
4
5
6
7
8
9
public Result<string> GetUsername(int id)
{
return id switch
{
< 0 => Result<string>.Failure("잘못된 접근입니다.", 400),
0 => None.Value,
_ => "DebugJO"
};
}
1
2
3
4
5
6
7
8
Result<string> result = GetUsername(-1);
string message = result.Match(
success: name => $"사용자: {name}",
none: () => "사용자를 찾을 수 없습니다.",
failure: (msg, code) => $" 오류({code}): {msg}"
);
Console.WriteLine($"message = {message}");