본문 바로가기
C#/C# 학습 (TIL)

C# 중급문법 Day5 Action / Func / event / 람다

by jjiing 2022. 6. 20.

지난번 델리게이트에 이어..

 

 

 

+ Action

 

public delegate void TestDel();

public delegate void OnReduceHp();

와 같이 리턴타입과 매개변수가 없는 델리게이트를 여러개 만들 필요가 있을까? >>없다.

 

그래서 Action이 존재한다.

 

 

Action이란?

 return 타입이 void이고 매개변수가 없는 delegate를 미리 선언한 것

 

 

요거 해줘야 합니다!

    public Action onActionNormal;  
    //Action은 return 타입이 void이고 매개변수가 없는 delegate를 미리 선언한 것
    //public delegate void Action();

    //Action<T>는 리턴타입이 없지만 매개변수가 존재할 때.
    //public delegate void Action<T>(T value);

    public Action<float> onActionFloat;
    public Action<float, int> onActionFloatInt;
    public Func<int> onFuncInt; //리턴타입이 있는 action이라고 생각하면됨
    public Func<float, int> onFuncFloatInt; //앞에있는것들이 매개변수, 마지막이 리턴타입

 

 

Action +f12

+ Func

Action과 Func의 차이점은

Action은 반환값이 없는 익명 함수이고

Func함수는 반환값이 있는 익명 함수이다.

 

 

Action : 리턴타입x, 매개변수x
Action<T> : 매개변수 T
Func<Tresult> : 리턴타입 TResult
Func<T, Tresult> : 매개변수 T, 리턴타입 TResult

 

 

 

 

 

사용 예시)

 

+event

 

public event Action onAction;

 

deligate와 event의 차이는?

event라는 수식어가 붙은 델리게이트는 클래스 내부에서만 호출할 수 있음

 

 

체인을 거는 것은 외부에서도 가능하다.

다른 클래스에서 호출 못하게 하려는 이유는 클래스 간 결합도를 낮추기 위함이다.

외부 클래스에서의 event

 

 

 

+ 람다, 람다문

- 람다란? 무명메서드

- 형식?     ()=> {};

- 목적?     간단한 처리 하나를 위해 함수를 만드는 것은 비효율적. 이 때 쓰는 것이 람다

사용 예시

 

람다의 단점 : 추적이 안되고, 가독성이 더 떨어질 때가 있음

주의)

재정의 될 가능성이 있는 함수는 웬만하면 건들지 않는다.

체인을 풀어주는 함수는 람다로 만들지 않는다.