상태 반환 패턴을 이용한 예시
아래의 글에 영감을 받아
다음의 코드를 생성해 보았습니다. 양수만 더할 수 있는 AddPositive()
가 있을 때 올바른 연산과 잘못된 연산을 Result<T>
을 이용해 반환할 수 있습니다.
// 함수의 성공/실패를 반환값을 통해 식별할 수 있는 Result 구현
Console.Write("a = ? ");
var a = int.Parse(Console.ReadLine()!);
Console.Write("b = ? ");
var b = int.Parse(Console.ReadLine()!);
var result = AddPositive(a, b);
if (result.IsError is true)
{
Console.WriteLine(result.ErrorMessage);
return;
}
Console.WriteLine(result.Value);
static Result<int> AddPositive(int a, int b)
{
if (a < 0 || b < 0)
return Result<int>.Error("양수만 더할 수 있습니다.");
return Result<int>.Success(a + b);
}
readonly ref struct Result<T>
{
public required T Value { get; init; }
public string ErrorMessage { get; init; }
public bool IsError => ErrorMessage is not null;
public static Result<T> Success(T value) => new()
{
Value = value
};
public static Result<T> Error(string errorMessage) => new()
{
Value = default!,
ErrorMessage = errorMessage
};
}
| 정상인 경우
a = ? 5
b = ? 4
9
| 오류인 경우
a = ? 5
b = ? -2
양수만 더할 수 있습니다.
상태를 가진 반환형은 필요에 따라 다양하게 디자인 할 수 있으며 특히 LINQ
와의 궁합도 잘 맞으리라 생각합니다.