람다! 아는척 하고 있었지만…
” 람다! “
” 하면 () => 뭐 이런식으로 사용하는….”
” 아무튼 콜백이 어쩌고 …. “
솔직히 잘 모르고 지금 껏 간혹 사용하고 있었다.
( 비쥬얼 스튜디오의 힘을 믿고 , 빨간 줄이 안나올 때까지 눈치껏 고쳐본다던가 ..)
문제는 C# 에서 제공하는 ( 처음에는 Unity 에서 제공하는 건 줄 알았다 . )
Action 타입을 인자로 제공할 때에 발생했다.
// 아래와 같은 함수가 있었는데 ,
void foo( Action action)
{
DoSomething();
action.Invoke();
}
// 이 함수를 저 위의 action 에 대입하려고 했다
void Act(string nameOfWhatToDo)
{
Human.Do(nameOfWhatToDo); // 별로 좋은 구조는 아니지만 ㅎㅎ..
}
// 이렇게
//( 유니티 )
void Start()
{
string strInputForAct = "공부";
foo( Act ) ; // 만약 Act의 인자가 없었다면 이렇게 했겠지만.. 버젓이 있었다 !
foo ( () => Act(strInputForAct));// 이리 저리 짜맞추어 본 결과는 이렇게 했다.
// 참고
foo( delegate(string str){ Act(str);}); // 나중에 검색해보니 , 원래는 이렇게 하는 것 같다 ( 무명 딜리게이트 )
}
퇴근하고 돌아와 더 찾아보니 ,
Unity 가 아니라 C# 에서 제공하는
Func 와 Action 이 있으며,
Func는 리턴 값을 가지고
Action 은 가지지 않는 다는 것을 빼면 둘의 용법은 같다.