델리게이트란?
- 함수를 대신 호출한다.
이벤트란?
- 특정 상황이 발생했을 때 알리고자 하는 용도로 여러 함수를 호출해야하는 경우에 사용한다.
- 델리게이트를 기반으로 한다.
델리게이트와 이벤트의 공통점
- 여러 함수를 호출할 수 있다.
델리게이트와 이벤트의 차이점
- 델리게이트는 한 클래스에 있는 함수를 호출할 수 있고 이벤트는 여러 클래스에 있는 함수를 호출할 수 있다.
사용시 주의점
- 델리게이트와 델리게이트에 추가할 함수가 같은 형식이어야 한다.
- https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/covariance-contravariance/variance-in-delegates 형식과 관련해선 이 글을 읽어보는 게 좋을 거 같다.
델리게이트 예시
Start()에서 chain을 호출했으니 게임을 시작하자마자 chain이 호출됨.
< Test1.cs >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test1 : MonoBehaviour
{
// 레벨업 할 때마다 power와 defence를 5씩 높여주고 싶음
int power;
int defence;
public delegate void ChainFunction(int value);
ChainFunction chain;
void Start()
{
chain += SetPower;// chain에 함수 더하기
chain += SetDefence;
//chain = SetPower; 이라고 하면 chain에 SetPower만 적용된다.
chain -= SetPower; // chain에 함수 빼기
chain(5); // chain 호출시키기
}
void Update()
{
}
public void SetPower(int value)
{
power += value;
}
public void SetDefence(int value)
{
defence += value;
}
}
이벤트 예시
유니티에서 오브젝트1에 Test1 스크립트를 부착해주고 오브젝트2에 Test2 스크립트를 부착해준다면 게임이 끝날 시 OnDisable()의 OnStart(5)가 호출됨.
< Test1.cs >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test1 : MonoBehaviour
{
// 레벨업 할 때마다 5씩 높여주고 싶음
int power;
int defence;
public delegate void ChainFunction(int value);
public static event ChainFunction OnStart;
void Start()
{
OnStart += SetPower;
OnStart += SetDefence;
}
void Update()
{
}
public void SetPower(int value)
{
power += value;
}
public void SetDefence(int value)
{
defence += value;
}
// MonoBehaviour 클래스 안에 있는 함수
// 게임이 꺼지거나 오브젝트가 비활성화되면 호출되는 함수
private void OnDisable()
{
OnStart(5);
}
}
< Test2.cs >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test2 : MonoBehaviour
{
void Start()
{
Test1.OnStart += Abc; //static이어서 다른 스크립트에서 OnStart에 접근 가능!
}
void Update()
{
}
public void Abc(int value)
{
print(value + "값이 증가했습니다");
}
}
https://www.youtube.com/watch?v=m9_D0DQ4SGU&list=PLUZ5gNInsv_O7XRpaNQIC9D5uhMZmTYAf&index=12
위 자료를 바탕으로 작성하였습니다.
'CS > C#' 카테고리의 다른 글
| [C#] Thread (2) | 2025.08.13 |
|---|---|
| [C#] readonly (1) | 2025.07.21 |
| [C#] static, 싱글톤 (0) | 2023.05.03 |
| [C#] 상속과 가상함수, 추상함수 (0) | 2022.07.31 |
| [C#] 컬렉션(Collection)과 제네릭 컬렉션(Generic Collection) (0) | 2022.07.26 |