[C#, 유니티] Unity3D_Delegate, Event

2022. 8. 12. 16:48코딩 2막 <C#개념편>

728x90

Delegate(위임, 대리자)

'함수(메소드)를 변수처럼 쓸수 없을까?'

사용방법은 함수(메소드)를 담는 변수처럼 쓴다

마치 버튼처럼 클릭했을 때 그 함수를 편히 쓸 수 있다

아직 완성이 되지않은 클래스에서 이벤트성으로 delegate를 종종 사용한다

 

하지만 제약이 있다

그건 함수이기때문에 반환형과 매개변수가 다를 경우 문제발생

* 메소드와 동일한 타입의 델리게이트 타입으로 선언해야 한다

* 선언한 델리게이트 타입으로 변수를 생성하고 해당 메소드를 참조시킨다


delegate chain(델리게이트 체인)

버튼 눌렀을때 반응할 함수가 여러개일때 체인을 쓴다

델리게이트는 여러 개의 메소드를 동시에 참조할 수 있다

참조된 메소드들은 차례대로 호출되는데

 

+=(Combine() 메소드)를 한다는 것은 그 함수의 반응을 하고싶을 때 쓴다

-=(Remove() 메소드)를 한다는 것은 그 함수의 반응을 안할때 쓴다

델리게이트 체인


만약 함수가 단 하나도 붙여있지 않을때 실행시킨다면?

델리게이트 변수가 null이 아닐때만 사용가능함

혹은

를 써줘야 한다


 

Event(이벤트)

어떤 사건이 변경되거나 발생했음을 그 시점에서 알려주는 함수

즉, 델리게이트를 event 한정자로 수식하여 생성한다

 

델리게이트는 CALLBACK 용도로, 이벤트는 객체의 상태변화나 사건 발생 알리는 용도로 구분해서 사용한다.

 

근데 이벤트 방식을 굳이 써야하는 이유?

개방폐쇄의 원칙에 어긋나지 않지만

매 프레임마다 호출해야하기 때문에 

데이터관리에 적합하지 않다

 

그래서 이벤트를 써야 하는데 이것을 콜백방식이라 부른다


CALLBACK

반응형 콘텐츠에서 주로 쓰이는 델리게이트는

콜백함수를 구현할 때 사용한다

 

등록되어있던 delegate를 통해 함수가 호출당하는 방식을 채택

(함수를 호출하기 위해서 파라미터를 던질때, 값 대신에 던지는 함수)

즉, A란 메서드를 호출할 때 B라는 메소드를 넘겨줘서

A메소드로 하여금 B메소드를 호출하도록 하는 방식이다

이때 A메소드를 콜백함수라고 부른다

 

콜백함수는 자기가 원하는 부분만 원하는대로 처리를 할 수 있어서

래스의 독립성 뿐 아니라 가독성도 높여주는데 큰 도움이 된다



공감해주셔서 감사합니다

728x90