작성
·
3.9K
1
답변 1
6
수강해주셔서 감사합니다.
delegate, action, func은 대리자라고 부르는 것으로 메소드에 대한 참조 변수를 만들기 위해 존재합니다. 이중 delegate가 가장 기본적인 형태입니다.
action과 func은 C# 버전이 올라가면서 편의성을 위해 프로그래머가 일일이 delegate를 정의하지 않아도되게 C# 내부적으로 정의하고 있는 대리자로 action은 인자만 존재하는 delegate, func은 인자와 결과 값이 모두 존재하는 delegate입니다.
저는 delegate를 직접 정의하여 delegate가 어떤 목적으로 존재하는지 명시하는 것을 선호할뿐 action이나 func을 사용해도 상관없습니다.
event는 좀 다른데요, 우리가 event 키워드를 붙이지 않고 그냥 Action<float> onAction 이런식으로 변수를 선언할 시에, 다른 클래스에서 example.onAction.Invoke(); 이런식으로 Action을 실행할 수 있게 됩니다. 하지만 event Action<float> onAction와 같이 event를 붙일 경우 대리자를 오직 변수를 선언한 클래스 내부에서만 쓸 수 있게되어 다른 클래스에서 example.onAction.Invoke(); 이런식으로 코드를 작성하면 에러를 띄우게 됩니다. 즉, event는 '클래스 내부에서만 실행할 대리자니 다른 곳에서 사용하지 못하게 하라'라고 컴파일러에 명시적으로 알려주는 기능을 합니다.
감사합니다.