인프런 커뮤니티 질문&답변

카카누님의 프로필 이미지

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

퀘스트 정보를 확인할 Quest View UI 제작

(delegate,Event) 와 (Action,Func)의 차이점

22.06.16 15:51 작성

·

3.7K

1

둘다 구조를 정의하고 +=,-= 로 이벤트 추가 삭제 하고 .Inovke()로 호출하는거 같은데 같은 기능으로 하는 녀석으로 봐야하나요 다른 기능을 하는 녀석으로 봐야하나요?

답변 1

6

Developer G님의 프로필 이미지
Developer G
지식공유자

2022. 06. 16. 16:34

수강해주셔서 감사합니다.

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는 '클래스 내부에서만 실행할 대리자니 다른 곳에서 사용하지 못하게 하라'라고 컴파일러에 명시적으로 알려주는 기능을 합니다.

감사합니다.