2022. 8. 12. 16:48ㆍ코딩 2막 <C#개념편>
Delegate(위임, 대리자)
'함수(메소드)를 변수처럼 쓸수 없을까?'
사용방법은 함수(메소드)를 담는 변수처럼 쓴다
마치 버튼처럼 클릭했을 때 그 함수를 편히 쓸 수 있다
아직 완성이 되지않은 클래스에서 이벤트성으로 delegate를 종종 사용한다
하지만 제약이 있다
그건 함수이기때문에 반환형과 매개변수가 다를 경우 문제발생
* 메소드와 동일한 타입의 델리게이트 타입으로 선언해야 한다
* 선언한 델리게이트 타입으로 변수를 생성하고 해당 메소드를 참조시킨다
delegate chain(델리게이트 체인)
버튼 눌렀을때 반응할 함수가 여러개일때 체인을 쓴다
델리게이트는 여러 개의 메소드를 동시에 참조할 수 있다
참조된 메소드들은 차례대로 호출되는데
+=(Combine() 메소드)를 한다는 것은 그 함수의 반응을 하고싶을 때 쓴다
-=(Remove() 메소드)를 한다는 것은 그 함수의 반응을 안할때 쓴다
만약 함수가 단 하나도 붙여있지 않을때 실행시킨다면?
델리게이트 변수가 null이 아닐때만 사용가능함
혹은
를 써줘야 한다
Event(이벤트)
어떤 사건이 변경되거나 발생했음을 그 시점에서 알려주는 함수
즉, 델리게이트를 event 한정자로 수식하여 생성한다
델리게이트는 CALLBACK 용도로, 이벤트는 객체의 상태변화나 사건 발생 알리는 용도로 구분해서 사용한다.
근데 이벤트 방식을 굳이 써야하는 이유?
개방폐쇄의 원칙에 어긋나지 않지만
매 프레임마다 호출해야하기 때문에
데이터관리에 적합하지 않다
그래서 이벤트를 써야 하는데 이것을 콜백방식이라 부른다
CALLBACK
반응형 콘텐츠에서 주로 쓰이는 델리게이트는
콜백함수를 구현할 때 사용한다
등록되어있던 delegate를 통해 함수가 호출당하는 방식을 채택
(함수를 호출하기 위해서 파라미터를 던질때, 값 대신에 던지는 함수)
즉, A란 메서드를 호출할 때 B라는 메소드를 넘겨줘서
A메소드로 하여금 B메소드를 호출하도록 하는 방식이다
이때 A메소드를 콜백함수라고 부른다
콜백함수는 자기가 원하는 부분만 원하는대로 처리를 할 수 있어서
클래스의 독립성 뿐 아니라 가독성도 높여주는데 큰 도움이 된다
공감해주셔서 감사합니다
'코딩 2막 <C#개념편>' 카테고리의 다른 글
[C#, 유니티] Unity3D_FPS Particle, Animator (4) | 2022.08.17 |
---|---|
[C#, 유니티] Unity 3D_FPS (0) | 2022.08.16 |
[C#, 유니티] Unity3D_인터페이스 (4) | 2022.08.11 |
[C#, 유니티] Unity3D_이동 매커니즘 (컴포넌트 컨트롤러) (0) | 2022.08.10 |
[게임 디자인] 시스템 디자인의 기초 3 (4) | 2022.08.05 |