[C#] delegate (델리게이트)PROGRAMMING/03. C#2024. 4. 16. 15:47
Table of Contents
반응형
delegate (델리게이트)
델리게이트는 한마디로 말해서 대리자이다. 메소드 참조를 포함하고 있는 영역이라고 말할 수 있다.
델리게이트는 메소드의 참조를 포함한다. 델리게이트를 이용해서 메소드를 넘겨줄 수 있다. 메서드 자체를 인자로 넘겨주는 ‘형식’이다. 델리게이트는 메소드를 참조 하는 것이고, 참조하는 메소드가 달라진다면 델리게이트 역시 달라진다.
선언방법
public delegate [반환형] [델리게이트명] (매개변수)
유니티[C#]를 이용한 델리게이트 예제 - 1
1
2
3
4
5
6
7
8
9
10
11
|
void Start()
{
TestDelegate t = new TestDelegate(Test);
t.Invoke("실행법1");
t("실행법2");
}
private void Test(string str)
{
print($"Test : {str}");
}
|
cs |
유니티[C#]를 이용한 델리게이트 예제 - 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
private void PutKeyCode1(int value)
{
print($"PutKeyCode1 : {value}");
}
private void PutKeyCode2(int value)
{
print($"PutKeyCode2 : {value}");
}
private delegate void RunDelegate(int value);
private RunDelegate run = null; // 멤버변수
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1)) // 숫자1번을 누르고
run = PutKeyCode1; // 함수를 변수처럼 사용 가능하다
if (Input.GetKeyDown(KeyCode.Alpha2)) // 숫자2번을 누르고
run = PutKeyCode2;
if (Input.GetKeyDown(KeyCode.Space)) // 스페이스를 눌렀을 때
run?.Invoke(Random.Range(0, 100));
}
|
cs |
유니티[C#]를 이용한 델리게이트 예제 - 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
public class Sort
{
public delegate int CompareHandler(int left, int right);
public void Execute(int[] array, CompareHandler handler)
{
if (array.Length < 2)
throw new System.ArgumentException("배열의 갯수는 최소 2개 이상이여야 한다"); // 예외처리
for(int i = 0; i < array.Length - 1; i++)
{
for(int j = i + 1; j < array.Length; j++)
{
int value = handler(array[i], array[j]); // i: left, j: right
if(value == -1)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}//for(j)
}//for(i)
}
}
public class Test_Delegate1 : MonoBehaviour
{
// 왼쪽이 작으면 오름차순, 왼쪽이 크면 내림차순
private int Ascending(int left, int right) // 오름차순
{
if (left == right) // 왼쪽 오른쪽이 같으면 정렬할 필요X
return 0;
return (right - left) > 0 ? 1 : -1; // 오른쪽 - 왼쪽이 0보다 크면 1 작으면 -1
}
private int Desending(int left, int right) // 내림차순
{
if (left == right) // 왼쪽 오른쪽이 같으면 정렬할 필요X
return 0;
return (left - right) > 0 ? 1 : -1; // 왼쪽 - 오른쪽이 0보다 크면 1 작으면 -1
}
private void Print(int[] arr)
{
string str = "";
foreach (int temp in arr)
{
if (str.Length > 0)
str += ", ";
str += temp.ToString();
}
print(str);
}
void Start()
{
int[] arr = new int[10];
for (int i = 0; i < arr.Length; i++)
arr[i] = Random.Range(1, 100);
Sort sort = new Sort();
sort.Execute(arr, Ascending);
Print(arr);
}
|
cs |
출처 및 참고: 강의 짱잘하시는 울 유니티 선생님 수업
반응형
@HYUNJZZANG :: HyunZzang
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)