C# 콜백, 델리게이트, 이벤트

2023. 10. 7. 16:45C#

콜백 (CallBack)

 

피호출자가 호출자를 호출하는 것, 시스템에서 특정 시점에 알림을 주는 것

유니티 버튼 이벤트, 비서(Delegate)에게 사장(Function)이 돌아온다면, 내가(프로그래머)가 말한 요청사항을 대신 전해달라고 요청하는 느낌, 비서에게 내 요청사항을 담고있게 함

 

예를 들어 비서, 사장을 예시로 (참고 : https://daekyoulibrary.tistory.com/entry/C-%EC%BD%9C%EB%B0%B1-%ED%95%A8%EC%88%98Callback%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EB%8C%80%EB%A6%AC%EC%9E%90Delegate%EB%8A%94-%EB%AD%98%EA%B9%8C)

 

비서에게 나의 요청사항을 남겨둔다. 현재 사장은 부재 중

 

사장이 와서, 요청사항을 비서가 사장에게 전해준다

 

사장은 요청사항을 통해 전달자에게 전화(Callback)한다

 

 

콜백이 없었다면 계속 요청하는 상황이 벌어지다

비서에게 두둘겨 맞는다는 것이 킬포인트다.

 

C#은 이러한 콜백을 적용할 수 있게 대리자(Delegate)를 사용하여 처리할 수 있다. 여기서 대리자는 위에서 비서의 역할을 한다.

 

대리자 (Delegate)

 

대리자(delegate)는 메서드를 대신 호출해주는 기법으로 '대신 실행해주는 사람'이라는 국어사전에서 설명하고 있는 의미와 유사하다.

 

대리자의 사용 방법은 delegate 키워드 빼면 메소드를 선언하는 것과 똑같이 생겼다.

선언한 대리자(delegate)는 요청사항을 전달해 주는 역할이며, 그렇기에 요청사항(메서드)가 필요하다.

 

대리자와 메서드의 반환 형식, 매개변수가 일치해야한다.

 

 

 

대리자는 이렇듯 자신이 참조하고 있는 메소드 코드를 실행하고 그 결과를 호출자에게 전달해준다.

 

대리자의 인자로 정적 메소드, 인스턴스 메소드 다 받을 수 있다.

 

이벤트(Event)

 

: 프로그래밍에 어떤 일이 생겼을 때 실행되는 객체입니다. 

이벤트기반 프로그래밍(Event-driven programming)은 사용자가 명령하는 것에 대해서 프로그램이 그에 반응하는 것처럼 이벤트 기반으로 만들어진 프로그래밍 방식입니다.

 

델리게이트와 이벤트 둘의 가장 큰 차이점 :  이벤트는 public으로 선언되어 있어도, 자신이 선언되어 있는 클래스 외부에서 호출할 수 없습니다. 이는 이벤트 기반 프로그래밍에서 안정성을 추구하는 것으로, 클래스 외부에서 이벤트에 변화를 줄 수 없게 하기 위함입니다.

 

델리게이트 = 콜백 용도.
이벤트 = 객체의 상태 변화, 사건의 발생을 알리는 용도

'C#' 카테고리의 다른 글

String vs StringBuilder  (0) 2023.10.13
프로퍼티 (Property)  (0) 2023.10.10
C# 작동 방식 .Net Framework, CLR  (0) 2023.10.09
C# LINQ(Language-Integrated Query)  (0) 2023.10.08