개인 공부/C#

델리게이트(delegate)와 이벤트 (event)

smallship 2024. 7. 26. 14:52

델리게이트 (Delegate)
델리게이트는 특정 메서드 시그니처와 일치하는 메서드를 참조할 수 있는 형식이다. 이를 통해 메서드를 변수처럼 다루고, 런타임에 메서드를 동적으로 호출할 수 있다.

 

이벤트 (Event)
이벤트는 델리게이트의 특수한 형태로, 주로 특정 동작이 발생했을 때 여러 구독자(subscribers)에게 알리는 데 사용된다. 이벤트는 델리게이트보다 더 제한적이며, 이벤트를 발생시키는 클래스 외부에서는 이벤트를 직접 호출할 수 없다.

 

사용 목적:

  • 델리게이트: 특정 메서드의 참조를 저장하고 런타임에 호출하는 데 사용된다. 함수 포인터와 유사한 역할이다.
  • 이벤트: 주로 상태 변화나 특정 동작이 발생했을 때 여러 구독자에게 알리는 데 사용된다. 이벤트는 더 제한적이며 외부에서 직접 호출할 수 없다.

접근 제한:

  • 델리게이트: 델리게이트를 참조하는 모든 코드에서 호출할 수 있다.
  • 이벤트: 이벤트를 소유한 클래스 외부에서는 이벤트를 직접 호출할 수 없고, 구독 및 구독 해지만 가능하다.

델리게이트를 선언한 후 해당 델리게이터 타입 인스턴스를 생성하고 메서드를 할당할 수 있다.
여러 메서드를 델리게이트에 할당하여 체인으로 연결할 수 있다.
람다 표현식을 사용하면 간결하고 유연하게 작성이 가능하다.
델리게이트와 이벤트 선언
다른 스크립트에서 이벤트를 구독하고 처리할 수 있다.

델리게이트와 이벤트는 비슷한 개념이지만 서로 다른 목적과 사용 사례를 가지고 있다.
델리게이트는 메서드 참조를 저장하고 호출하는 데 사용되며, 이벤트는 주로 상태 변화나 특정 동작이 발생했을 때 알리는 데 사용된다.
이벤트는 델리게이트보다 더 제한적이며, 이벤트를 발생시키는 클래스 외부에서는 이벤트를 직접 호출할 수 없다.
이를 통해 코드의 안전성을 높이고, 이벤트 구독자가 예상치 못한 방식으로 이벤트를 트리거하는 것을 방지할 수 있다.


C#에서 Action과 Func 델리게이트는 표준 델리게이트 타입으로, 코드에서 델리게이트를 정의할 때의 반복적인 작업을 줄이는 데 유용하다.

Action 델리게이트는 반환값이 없는 메서드를 참조하는데 사용되며 Func 델리게이트는 반환값이 있는 메서드를 참조하는데 사용된다.

이 두 타입은 특히 람다 식과 결합하여 간결하고 읽기 쉬운 코드를 작성하는 데 도움을 준다.

 

매개변수가 없는 Action
매개변수가 있는 Action
여러 매개변수를 받는 Action

반환값이 있는 Func와 매개변수와 반환값이 있는 Func이다.

 

Action과 Func를 혼합하여 데이터를 처리하고 결과를 출력하는 프로그램을 작성해보았다.


Action과 Func는 앞서 말했듯이 C#에서 간결하고 유연한 코드를 작성하는데 유용하다. 이들을 사용하면 코드의 가독성과 유지보수성을 높일 수 있으며 다양한 시나리오에서 효과적으로 활용할 수 있다.

이러한 델리게이트를 사용하여 이벤트 처리, 비동기 작업, 함수형 프로그래밍 등 다양한 프로그래밍 패턴을 구현할 수 있다.

'개인 공부 > C#' 카테고리의 다른 글

연결 리스트 (Linked List)  (1) 2024.07.26
스택, 큐  (1) 2024.07.26
추상 클래스  (0) 2024.07.26
튜플  (0) 2024.07.25
유니티 리플렉션 (Reflection)  (0) 2024.07.19