티스토리 뷰

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

제가 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 . . .

 

댓글
  • 프로필사진 황희 안녕하세요. 오랫만에 댓글로 인사드립니다.
    글을 읽다가 Func<TResult> 가 파라미터 없이 결과 값만 받을 수 있다고 되어 있는데, 타 분야 개발자 입장에서 Func<T, TResult> 처럼 파라메터도 받을 수 있다는 사실이 같이 포함 되었으면 좋을 것 같습니다. 링크 않누르고 대충 읽고 넘어가면 Func 이 여러가지 Type이 있다는 것을 놓치는 것 같아 의견 드립니다.
    2021.02.18 01:14
  • 프로필사진 Connor Park 네~ 좋은 의견 감사합니다. 2021.02.18 13:00 신고
댓글쓰기 폼
Total
624,918
Today
25
Yesterday
63
«   2021/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
09-19 13:54
글 보관함