티스토리 뷰

.NET 5, 6, 7

Action<T>? Func<TResult>?

kaki104 2021. 1. 21. 10:05
반응형

개발을 하다 가끔 궁금했던 내용을 정리해 봅니다. 

제가 Action<T>와 Func<TResult>의 사용법을 명확하게 정리를 하지 못하고 있었는데, 어제 해당 기능을 이용해서 저장과 불러오기 기능을 구현해 보니 좀 명확하게 구분이되는 것 같습니다.

Action<T>

매개 변수를 한개 가지는 값을 반환하지 않는 메서드를 캡슐화합니다. 매개 변수 1개를 넣어서 실행시키는 메서드를 정의해 놓고 전혀 다른 곳에서 메서드를 실행해서 원하는 작업을 진행할 수 있습니다.

더 자세한 사항은 여기를 참고합니다.

Func<TResult>

매개 변수가없는 메서드를 캡슐화하고 TResult 매개 변수에 지정된 형식의 값을 반환합니다. Func는 기본적으로 값을 반환해야하기 때문에, Action<T>와 비슷하게 보이지만, 매개 변수가 없는 함수를 호출하고 반환 값을 받아서 작업을 진행할 수 있습니다.

더 자세한 사항은 여기를 참고합니다.

 

여기에서는 파라메터를 받아서 사용하는 방법에 대해서 다루고 있지 않치만, Action이나 Func는 모두 여러개의 파라메터를 받아서 사용할 수 있습니다. 참고하시면 좋을 것 같습니다.

.NET Console app

//.net 5.0
using System;

/// <summary>
/// 문자열 입력받아서 처리할 수 있는 동작을 정의
/// </summary>
Action<string> SaveCommand;
/// <summary>
/// 문자열을 반환하는 함수를 정의
/// </summary>
Func<string> LoadCommand;

MainView();
SubView();

/// <summary>
/// SaveCommand와 LoadCommand를 정의
/// </summary>
void MainView()
{
    string _savedData = string.Empty;
    SaveCommand = data =>
    {
        _savedData = data;
        Console.WriteLine($"Saved Data : {_savedData}");
    };
    LoadCommand = () =>
    {
        return $"{_savedData} from MainView";
    };
}

/// <summary>
/// SaveCommand와 LoadCommand를 실행
/// </summary>
void SubView()
{
    SaveCommand.Invoke("Hello Kaki104");
    var data = LoadCommand();
    Console.WriteLine($"Loaded Data : {data}");
}

Result

Saved Data : Hello Kaki104
Loaded Data : Hello Kaki104 from MainView

C:\Users\kaki1\source\repos\ActionFuncSample\ActionFuncSample\bin\Debug\net5.0\ActionFuncSample.exe (process 29624) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .

 

반응형
댓글