호빵의 IT 개발소

[C#] Delegate (대리자) 본문

C#, 유니티/C# 기초

[C#] Delegate (대리자)

호빵Stack 2022. 1. 9. 01:51

대리자를 들어가기 전에 간단한 예시를 상황을 이해하고 들어가야 이해하기가 수월합니다.

 

1. 업체 사장님께 연락 - 사장님의 비서에게 전화가 넘어감

2. 우리의 연락처와 용건을 비서에게 알려준 뒤  //함수 자체를 인자로 넘겨줌

3. 거꾸로 연락을 달라고 얘기를 합니다. //콜백방식 즉, 함수를 호출

 

함수 자체를 인자로 넘겨주고 나중에 필요할 때 안쪽에서 역으로 호출하는 것을 콜백 방식이라고 합니다.

class Program
{
	//UI
    static void ButtonPressed(/* 함수 자체를 인자로 넘겨주고 */)
    {
    	// 함수를 호출();
    }
    
    static void Main(string[] args)
    {
    	// delegate (대리자)
        Console.WriteLine();
        
        ButtonPressed(/* */);
    }
}

 

delegate

형식은 형식인데, 함수 자체를 인자로 넘겨주는 형식

int는 반환, void는 입력, 예제에서 OnClicked는 delegate 형식의 이름입니다.

class Program
{
    delegate int OnClicked(); //반환 : int , 입력 : void
	
	//UI
    static void ButtonPressed(OnClicked clickedFunction/* 함수 자체를 인자로 넘겨주고 */)
    {
    	// 함수를 호출();
        clickedFunction();
    }
    
    static int TestDelegate()
    {
    	Console.WriteLine("Hello Delegate")
        return 0;
    }
    
    static int TestDelegate2()
    {
    	Console.WriteLine("Hello Delegate2")
        return 0;
    }
    
    static void Main(string[] args)
    {
    	// delegate (대리자)
        Console.WriteLine();
        
        ButtonPressed(TestDelegate); //함수 자체를 인자로 넘김 (첫번쨰 방법)
        
        Onclicked clicked = new Onclicked(TestDelegate);
        clicked += TestDelegate2; //체이닝 기능 즉, TestDelegate가 실행되고 뒤에 TestDelegate2가 실행됨
    }
}

※ ButtonPressed(TestDelegate);와 Onclicked clicked = new Onclicked(TestDelegate);는 같은 의미이나 뒤에 예제를 쓰는 이유는 체이닝 기능 즉, 대리자에 여러개의 함수를 넘겨줄 수 있습니다.

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

'C#, 유니티 > C# 기초' 카테고리의 다른 글

[C#] Lambda  (0) 2022.01.09
[C#] Event  (0) 2022.01.09
[C#] Property  (0) 2022.01.09
[C#] Interface  (0) 2022.01.09
[C#] Generic(일반화), object  (0) 2022.01.09
Comments