Delegate: ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ํจ์
Action : ๋ฐํ๊ฐ์ด ์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ
Func: ๋ฐํ๊ฐ์ด ์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ
callback: ์์ ์ด ๋๋ฌ์์ ์๋ ค์ฃผ๋ ์ฉ๋
* Delegate
๊ธฐ๋ณธํํ๋ ์๋์ ๊ฐ๋ค.
public class TestClass {
delegate void MyDelegate();
public TestClass() {
MyDelegate myDelegate = FuncTest;
myDelegate();
}
public void FuncTest() {
}
}
Delegate๋ฅผ ํจ์์ ๋ฆฌํดํ์ , ์ธ์๊ฐ์ ๋ง๊ฒ ์ ์ธํ๋ค. ์ฌ์ฉ์ ์ ์ ์ธํ๊ณ ํธ์ถํ๋ค.
ํ์ฉ1)
์ด๋ค ๋ฒ์ฃผ ์์ ์๋ ์ฌ๋ฌ ํจ์๊ฐ ์ํ๋์ด์ผ ํ ๋
public class TestClass {
delegate void DamageDelegate();
DamageDelegate damageDelegate;
private Attack() {
calDelegate += ReduceGageBar;
calDelegate += ReduceHeart;
}
private void ReduceGageBar() {
// gage bar ์ค์ด๊ธฐ
}
private void ReduceHeart() {
// ์ฒด๋ ฅ์ค์ด๊ธฐ
}
}
ํ์ฉ2)
ํน์ ๋์์ ๊ฐ๊ณ ํน์ ๋์์ ๋ถ๊ธฐ๋ก ๋ค๋ฅธ ๊ณตํต๋ถ๋ถ์ด ์์ ๋
public class TestClass {
delegate int MyDelegate();
private TestClass() {
//Japan ์ด๋ฉด
ShowMenu(GetAge_Japan);
//Korean ์ด๋ฉด
ShowMenu(GetAge_Korean);
}
private void ShowMenu(MyDelegate GetAge) {
int age = GetAge();
if(age >= 20) {
//์ฑ์ธ์
๋๋ค ์ถ๋ ฅ
}else {
//๋ฏธ์ฑ๋
์์
๋๋ค ์ถ๋ ฅ
}
}
private int GetAge_Korean() {
//ํ์ฌ์ผ์ - ์๋
์์ผ + 1
return 0;
}
private int GetAge_Japan() {
//ํ์ฌ์ผ์ - ์๋
์์ผ
return 0;
}
}
* Action/Func
public class TestClass {
private Action<int> _action;
private Action<int, int> _action2;
private Func<int> _func;
private Func<int, string> _func2;
public TestClass() {
_action = SetData;
_action2 = SetData2;
_func = FuncTest;
_func2 = FuncTest2;
}
private void SetData(int data) {
}
private void SetData2(int data, int data2) {
}
private int FuncTest() {
return 0;
}
private string FuncTest2(int a) {
return string.Empty;
}
}
Action ์ SetData(), SetData2() ํจ์ ์ฒ๋ผ ๋ฐํ๊ฐ์ void ์ด๋ค.
Func๋ FuncTest(), FuncTest2() ํจ์ ์ฒ๋ผ ๋ฐํ๊ฐ์ด ์กด์ฌํ๋ค.
Action, Func ๋๋ค ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
Func์ ๋งจ ๋ ํ๋ผ๋ฏธํฐ๋ return ํ์ ์ ์๋ฏธํ๋ค.
Task, Action, Func ์ฌ์ฉ์)
using System.Threading.Tasks;
using UnityEngine;
public class TestClass {
private void Start() {
Task.Factory.StartNew(ActionTest);
Task.Factory.StartNew(FuncTest);
}
private void ActionTest() {
}
private int FuncTest() {
return 0;
}
}
* Action/callback ์์
using System;
using UnityEngine;
public class TestScript : MonoBehaviour
{
private void Start(){
TestCallback((result) => Debug.Log("result : " + result));
}
private void TestCallback(Action<string> callback){
callback("callback!");
}
}
callback ์ ํ๋์ด ๋๋ฌ์ ๋ ์๋ ค์ฃผ๋ ๊ฒ.
์ฝ๋ฐฑ ํ ์ํํ ๋ด์ฉ์ ์์ฒ๋ผ ๋๋ค์์ผ๋ก ํํํ๋ฉด ๊น๋ํ๋ค.
'๐ฎ Unity Study > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] lambda์์ด๋ ? ์ธ์ ์ฌ์ฉํ ๊น ? (0) | 2023.08.17 |
---|---|
[C#] ๋๊ธฐ/๋น๋๊ธฐ (feat. Coroutine, Task, async/await) (0) | 2023.08.16 |
[C#] List ๊ฐ์ Enumerable ํด๋์ค์์ ์ฌ์ฉํ ์ ์๋ ํจ์๋ค (0) | 2023.04.26 |
C# Code Convention (0) | 2022.10.13 |
[KLA ๋ฉํฐ์บ ํผ์ค] C#7.0 ์ ๋๋ก ๋ฐฐ์ฐ๊ธฐ Part.2(์ ๋ฌธ2) (0) | 2022.08.04 |