본문 바로가기

개발/Objective-C

delegate

델리게이트(delegate)

: 메소드를 참조하기 위한 기법으로 이벤트와 스레드를 처리하는데 주로 사용

 

C/C++언어에서의 함수 포인터와 유사한 기능을 갖고 있지만 함수 포인터보다는 객체지향적이며 타입 안정적이다.

 

델리게이트가 객체지향적이라는 이유는 델리게이트가 정적 메소드 뿐만 아니라, 인스턴스 메소드도 참조 할 수 있기 때문이다.

 

타입 안정적

-델리게이트의 형태와 참조할 메소드의 형태가 항상 일치해야함!!!!!!

 

-모든 델리게이트는 묵시적으로 System.Delegate클래스를 상속한 클래스 형으로 간주된다.

-델리게이트 객체를 생성하는 것은 클래스 객체를 생성하는것과 유사하다.

-델리게이트 객체를 통하여 메소드를 호출할 수 있다는 점이 특징적이다.

 

델리게이트의 정의

 

[수정자] delegate [반환형] 델리게이트이름(파라먼트);

 

using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateCall
{
    delegate void firstDelegate();       //인자값이 없고 반환형이 void 인 델리게이트
    delegate void secondDelegate(int i); //인자값이 하나가 있고 반환형이 void인 델리게이트

    public class TestDelegate
    {
        public void Go()
        {
            Console.WriteLine("총알이 나갑니다.");
        }
        public void GoBomb(int i)
        {
            Console.WriteLine("폭탄이 {0}개나갑니다.",i);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            TestDelegate TD = new TestDelegate();         //클래스 인스턴스
            firstDelegate Del1 = new firstDelegate(TD.Go); //델리게이트 인스턴스
            secondDelegate Del2 = new secondDelegate(TD.GoBomb); //델리게이트 인스턴스
            Del1();  //델리게이트안의 메서드 실행
            Del2(2); //델리게이트안의 메서드 실행
        }
    }
}

GoBomb 메서드의 형태는 secondDelegate 형태와 같아야 사용할 수 있다.

 

delegate void secondDelegate(int i);   ==   public void GoBomb(int i)

:반환형과 파라먼트 갯수가 일치한다.


 

Go메서드의 형태는 firstDelegate 형태와 같아야 사용 할 수 있다.

 

delegate void firstDelegate();  ==  public void Go()

:반환형과 파라먼트 갯수가 일치한다.


[출처] 델리게이트 간단한 이론 정리 (know-where) |작성자 현우


'개발 > Objective-C' 카테고리의 다른 글

Objective-C 기초  (0) 2010.09.06
OBJECT-C 아키텍쳐  (0) 2010.09.06
Object-c에서의 delegate  (1) 2010.09.06
retain 관련 알아둘것  (0) 2010.09.06
프로퍼티  (0) 2010.09.01