inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

4236

카카누

작성한 질문수 24

1

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

unity

답변 1

6

Developer G

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

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

감사합니다.

Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.

0

23

2

Quest System의 확장성에 대한 질문

0

106

1

공부 방향에 대해 궁금한 점이 있습니다.

0

143

2

End()와 Complete() 함수를 따로 구현한 의도

0

166

2

Target의 value에 Object 자료형 관련 질문입니다!

0

149

2

TaskGroupState에 대하여 질문이 있습니다

0

112

2

Elite와 Normal Germ의 IsTarget()질문입니다.

0

100

2

퀘스트 시스템을 확장하면서 생긴 의문점 입니다.

0

166

2

퀘스트 클리어해도 동일 퀘스트가 노출됩니다

1

129

3

퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.

0

85

1

프로퍼티 사용 질문입니다.

0

118

1

Task 에서 Object 타입 사용

0

120

2

파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.

0

218

1

Destroy() 지연 파괴에 관하여

0

140

1

Action & Delegate

0

179

2

강의에서 리워드 관련 언급은 없으셔서 질문드립니다.

0

276

1

궁금한게있습니다

0

294

1

스크립터블 오브젝트 Instantiate?

0

437

1

원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요

0

339

1

Quest Cancel() 메소드

0

263

2

Task의 IsEqual

0

227

1

실전예제 UI 자료

0

194

1

스크립터블 오브젝트

1

325

1

Task 예시

1

167

1