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

코리니님의 프로필 이미지
코리니

작성한 질문수

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

서브 퀘스트 제작

Action & Delegate

작성

·

38

0

영상을 보다보면 delegate을 쓰는 상황도 있고, UnityAction을 쓰는 상황도 있는데요.

두 개가 물론 차이가 있지만 기능적으로는 비슷한 쓰임으로 사용되는 것 같은데 어디에 delegate를 사용하고 UnityAction을 사용하는지에 대한 기준이 있으신가요?? 아니면 편한 것으로 사용하는 것인가요??

저도 코드를 작성해보다가 명확한 해답을 찾지 못해서 의견을 듣고자 질문드립니다.

추가로 event와 UnityEvent도 쓰임이 비슷한 것으로 알고 있는데 사용할 때 기준이 있는지 알고싶습니다!

감사합니다

답변 2

0

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

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

저는 일단 함수의 인자로 사용할 땐 Action을, event를 만들 땐 delegate를 사용합니다.
강의에서 UnityAction을 사용한 이유는 UnityEvent에 등록해줄 것이라 사용한거구요, 보통은 그냥 Action을 사용합니다.

저는 Type에 대해 명시적인걸 좋아해서 delegate를 정의하는걸 선호하는데, 다른 프로그래머분 중에는 불필요한 정의 작성이라고 Action을 선호하는 등 delegate를 정의하냐, Action을 사용하냐는 순전히 프로그래머의 취향 차이입니다.

다만 event와 UnityEvent는 좀 다릅니다. UnityEvent를 사용하게되면 Inspector 창에서 함수를 등록받을 수 있게 되는데요, 이 방식은 Code 작성 없이 간편하게 함수를 등록할 수 있다는 장점이 있지만 어떤 함수가 event에 등록됐는지 알게 어렵게 만들어 디버깅과 로직 파악을 힘들게 만든다는 단점이 있습니다. 개발에 있어서 디버깅을 힘들게 만드는건 굉장히 큰 단점이구요, Rider IDE를 쓰면 UnityEvent에 등록된 함수들을 추적해주긴 하는데, 그건 유로 IDE 기능이니까 논외로 치겠습니다. 그래서 UnityEvent는 명확한 기준을 가지고 사용하는게 좋습니다. 저도 실제 프로젝트를 진행할 때 UnityEvent를 많이 사용하지 않구요, 사용할만 상황이 없어서 아예 사용하지 않을 때도 있습니다.
다만, 이 기준이라는게 어떻게 정의해서 말씀드리기가 좀 애매한데 보통 UI Event, Animation Event에 주로 사용하고 그 외의 경우에는 그때 그때 상황을 봐서 사용합니다. 이는 수강생분이 앞으로 프로그래밍을 하시면서 "UnityEvent를 남용하면 이런 문제가 생기는구나", "이런 구조는 좋지 않구나", "사람들은 주로 이런 때에 UnityEvent를 사용하는구나"라고 경험을 쌓으시면서 스스로 기준을 잡으셔야하는 부분입니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 Action & Delegate와 관련하여, delegateAction, 그리고 eventUnityEvent의 사용 상황에 대한 기준을 알고 싶으신 것으로 이해했습니다.

이러한 개념들은 모두 C#에서 메소드에 대한 참조를 가능하게 해주는 대리자(Delegate)의 일종입니다. 사용 상황에 따라 다르긴 하지만, 기본적으로 delegate는 메소드의 참조를 보관할 수 있는 타입을 정의할 때 사용하고, Action은 입력 파라미터를 받고 반환 값이 없는 메소드에 대한 일반화된 대리자입니다. UnityAction은 Unity에서 제공하는 Action 대리자의 특수 형태로, Unity의 이벤트 시스템과 연동하여 사용됩니다.

대한 차이점에 대해 좀 더 자세한 설명이 필요하신 경우, Unity에서 대리자 및 이벤트를 다루는 방법에 대해 설명하는 다음 글들이 도움이 될 수 있습니다:

  1. ”(delegate,Event) 와 (Action,Func)의 차이점”에서는 delegate와 Action/Func의 기본적인 차이와 각각을 사용하는 상황에 대해 설명하고 있습니다. 이 글에서는 delegate와 Action/Func이 어떻게 서로 다르며, 구체적으로 어떤 상황에서 각각을 사용하면 좋을지에 대한 지식공유자의 선호도 및 사용 예를 제공하고 있습니다. 다만, UnityAction에 대한 구체적인 언급은 없습니다.

  2. “델리게이트 궁금한점”에서는 delegate를 사용하는 구체적인 상황과, 객체별로 delegate가 어떻게 작동하는지에 대한 설명이 있습니다. Unity의 컨텍스트에서 delegate를 어떻게 사용할지에 대한 이해도를 높일 수 있습니다.

이러한 자료들은 delegate와 Action의 차이점 및 사용법에 대한 기본적인 이해를 돕는데 유용할 것입니다. 하지만 UnityAction과 UnityEvent의 사용법 및 기준에 대한 명확한 기준을 제시하는 구체적인 답변을 찾기는 어려울 수 있습니다. 이 경우, Unity 공식 문서 및 관련 커뮤니티 포럼에서 추가 정보를 찾는 것도 좋은 방법일 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

코리니님의 프로필 이미지
코리니

작성한 질문수

질문하기