2022년 2월 1일 화요일

[C#동영상]C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용, C#학원, C#교육, C#자바교육, C#자바학원

 [C#동영상]C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용, C#학원, C#교육, C#자바교육, C#자바학원


http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=410 


C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용

C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용델리게이트(Delegate)델리게이트는 언제 필요할까?델리데이트는 언제 필요할까?⓵ 윈도우 프로그램에서 이벤

ojc.asia


https://www.youtube.com/watch?v=HqxRtDmyErg&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=18 


https://www.youtube.com/watch?v=p9H3cDRjS7M&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=17 


https://www.youtube.com/watch?v=z2pVtukbe_o&list=PLxU-iZCqT52DJyR6gqJy0MCL8RiTVXdos&index=19 


http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=410 


C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용

C# 델리게이트(Delegate), 델리게이트는 언제 필요할까?, 윈도우 이벤트, 콜백구현시 사용델리게이트(Delegate)델리게이트는 언제 필요할까?델리데이트는 언제 필요할까?⓵ 윈도우 프로그램에서 이벤

ojc.asia






델리게이트(Delegate)

델리게이트는 언제 필요할까?






델리데이트는 언제 필요할까?


⓵ 윈도우 프로그램에서 이벤트에 가입할 때 델리게이트로 가입하고 이벤트가 호출되면 델리게이트가 참조하는 메서드가 실행된다.


⓶ 델리게이트(Delegate)는 자기 자신이 실제 하는 일은 없고 단지 가리키고 있는 메소드를 호출하여 실행시키는 역할을 한다. 이러한 메서드에 대한 참조를 가리키고 있으므로 불가능한 작업 등이 가능해 지는데, Delegate 다른 함수의 인자로 넘겨주게 되면 그 함수는 델리게이트가 던지는 함수의 참조를 이용하여 실행 시점에 호출될 함수를 결정 할 수 있다.


아래와 같은 버블정렬이 있다고 하자.



for (int i = 1; i < obj.Length; i++)      {

          for (int j = 0; j < i; j++)     { 

              //비교대상 둘중 i는 뒤에 있는것, j는 앞에 있는것

             //뒤집을지 말지를 결정하는 부분, 앞의것이 크면 바꾸므로 현재는 오름차순

             if (obj[j] > obj[i]) { 

                 int temp = obj[i]; // i 와 j 바꾸기 

           obj[i] = obj[j]; 

                 obj[j] = temp; 

              } 

     } 

}


만약 버블정렬의 데이터가 위와 같은 숫자가 아니고 객체라면 현재와 같은 구조에선 곤란하다. 이는 사용자가 어떤 식으로 클래스등을 정의해 놓았는지 알수가 없기 때문이다. 사용자에게 여러분이 만든 버블정렬 컴포넌트를 판매한다고 가정한다면 각 사용자를 위해 다른 프로그램을 만든다는 건 말도 안 되는 이야기 이다. 이럴 때 필요한 것이 바로 델리게이트이다.


우리가 만든 버블 소트기가 범용의 소트기가 되기 위해서 소트기를 구매한 사용자는 ❶정렬을 원하는 대상과 어떻게 정렬할지를 버블 소트기에 알려주도록 델리게이트가 ➋참조할 메소드를 만들어야 한다. 예를들면 사원들을 급여오름차순으로 정렬할지, 이름 오름차순으로 정렬할지등은 구매자가 작성을 해야 하는 부분이다.


namespace Deletest

{


    //우리의 버블 소트기를 구매한 사용자는 OjcDelegate가 참조하는 메소드를 만들어서

    //정렬의 기준을 제공하도록 한다.

    delegate bool OjcDelegate(object obj1, object obj2);


    //---------------------------------

    //우리가 만든 버블 소트기

    //---------------------------------

    class OjcSorter

    {

        //obj는 정렬 대상, 정렬의 타겟

        //deli는 뒤집을지 말지를 결정하는 메소드를 참조하는 델리게이트

        public static void BubbleSort(object[] obj, OjcDelegate deli)

        {

            object tmp;


            for (int i = 1; i < obj.Length; i++)

            {

                for (int j = 0; j < i; j++)

                {

                    //사용자가 작성한 정렬의 기준이되는 메소드를 호출하여 뒤짚을지를 결정

                    //비교대상 둘중 i는 뒤에 있는것, j는 앞에 있는것

                    if (deli(obj[j], obj[i]))

                    {

                        tmp = obj[i];

                        obj[i] = obj[j];

                        obj[j] = tmp;

                    }

                }

            }

        }

        //----------------------------------------------------------------------------------------


        class Dog

        {

            string name;

            public Dog(string name) => this.name = name;

            public static bool MySort(object d1, object d2)

            {

                //이름순 오름차순정렬을 위해

                //앞에 있는 d1.name이 크면 뒤집으라고 true를 리턴

                //return String.Compare(d1.ToString(), d2.ToString()) > 0 ? true : false;

                return ((((Dog)d1).name.CompareTo(((Dog)d2).name) > 0) ? true : false);


            }

            public override String ToString()

            {

                return "Dog : " + name;

            }

        }


        //--------------------------------------------------------------------------------------


        class Emp

        {

            string name;

            int sal;

            public Emp(string name, int sal)

            {

                this.name = name;

                this.sal = sal;

            }

            public static bool MySort(object e1, object e2)

            {

                //급여순 오름차순정렬을 위해 

                //앞에 있는 e1.sal이 크면 뒤집으라고 true를 리턴

                return ((((Emp)e1).sal > ((Emp)e2).sal) ? true : false);

            }


            public override String ToString()

            {

                return "Emp : " + name + ", " + sal;

            }

        }


        //---------------------------------------------------------------------------------

        class Program

        {

            static void Main(string[] args)

            {

                Dog[] d = new Dog[4];

                d[0] = new Dog("멍멍이"); d[1] = new Dog("푸들이");

                d[2] = new Dog("진도이"); d[3] = new Dog("삽살이");


                OjcDelegate deli = new OjcDelegate(Dog.MySort);


                //d:정렬대상, deli:뒤집을기준을정의한 메소드를 참조하는 델리게이트

                OjcSorter.BubbleSort(d, deli);


                Console.WriteLine("<<<<<<<<< Dog 정렬된 후 >>>>>>>");

                foreach (Dog dog in d)

                {

                    Console.WriteLine(dog);

                }


                Console.ReadLine();


                Emp[] e = new Emp[4];

                e[0] = new Emp("홍길이", 900); e[1] = new Emp("남길이", 800);

                e[2] = new Emp("오라클자바커뮤니티", 5000); e[3] = new Emp("김길동", 100);


                deli = new OjcDelegate(Emp.MySort);


                //e:정렬대상, deli:뒤집을기준을정의한 메소드를 참조하는 델리게이트

                OjcSorter.BubbleSort(e, deli);


                Console.WriteLine("<<<< Emp 급여순 정렬된 후 >>>>");

                foreach (Emp emp in e)

                {

                    Console.WriteLine(emp);

                }

            }

        }

    }

}





#델리게이트, #Delegate, #콜백, #콜백이란, #시샵교육, #닷넷교육, #시샵학원, #닷넷학원, #시샵동영상, #닷넷동영상, 델리게이트, Delegate, 콜백, 콜백이란, 시샵교육, 닷넷교육, 시샵학원, 닷넷학원, 시샵동영상, 닷넷동영상, 

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...