어제 약속한 대로, 오늘은 델리게이트, 람다식에 대해 다룬다. 빠르게 시작하자.
델리게이트
델리게이트는 메서드를 받는 참조 타입이다. 어떻게 보면 델리게이트는 저장된 메서드들을 차례대로 실행한다.
델리게이트를 여러군데에서 반복적으로 같은 메서드를 호출해야 할때사용하면 좋을듯 하다.
delegate <반환T> name (<입력 T>...);
delegate <반환T> name2();
유선 델리게이트를 선언하는 방식이다. 위는 입력값을 받는경우, 아래는 입력값을 받지 않는 경우이다.
이제 메서드를 하나 정의해주자. 이는 정의내린 델리게이트의 형식을 따라야 델리게이트에 넣어줄 수 있다.
만들었다면, 델리게이트를 다음과 같이 만들면 된다.
<DelegateName> mydelegate = Method
mydelegate(<inputT> ..)
<DelegateName2> mydelegate2 = Method2
mydelegate2 += Method3
mydelegate2()
위의 것을 느낌삼아, 구현을 해 보았다. <>부분은 그냥 선언한 델리게이트 명칭이 들어가면 된다. (<>이거 없이 그냥 이름만)
그리고 등호를 사용해 메서드를 대입시키거나, +=, -=을 사용하여 메서드를 추가해 줄수도 있다.
그리고 델리게이트에 변수를 넣어 호출한면, 저장된 모든 메서드를 해당 값으로 실행시킨다.
Func 와 Action
물론 매번 델리게이트를 정의시켜서 만들기는 쉽지않다. 그래서 존재하는게 Func와 Action이다.
이들은 미리 정의된 제너릭으로, 델리게이트를 안만들고 델리게이트를 선언한거처럼 쓸 수 있다.
Func는 변수를 반환하는 델리게이트, Action은 변수를 반환하지 않는 델리게이트이다.
Func<input1T, input2T.... , outputT> func = Method1;
Action<input1T, input2T, ...> action = Method2;
outputT temp = func(input1, input2 ...)
action(input1, input2)
이런느낌으로 알고가면 좋다.
Nullable
전에는 매번 할당되지 않음을 정의하기 위해 안쓰는 값을 넣었었는데, C#에서는 이를 해결할 nullable이라는것이 존재한다.
int? hey = null;
hey = 1;
위에서 정의한 방식이 nullable이다. 형식 뒤에 물음표를 붙이면, 이제 이는 nullable int가 된다. 보면 알겠지만, int형식 + null이라서 1같은 값을 대입해도 된다.
이는 이번주 개인프로젝트 할때 매우 유용하게 사용하였다. 매번 null인지 확인을 하는 로직을 짜서 구현하니, 매번 정의되지 않은 값의 설정을 찾아 줄 필요가 없어서 편하게 사용하였다.
오늘은 급해서 빨리 썼지만... 아마 다음은 코드리뷰 하지 않을까 한다.