프로그래밍 언어/C#

프로퍼티, 델리게이트, 이벤트 간단 정리

게임 개발 2024. 1. 8. 23:35

 

 

 

프로퍼티

프로퍼티(property)란
클래스의 private 필드를 형식적으로 다루는 일종의 메소드로 간주할 수 있다.

 

즉, 클래스의 private 필드는 정보 은닉(information hiding)을 위해 다른 클래스에서는

임의로 접근이 허용되지 않지만 대응되는 여러 프로퍼티를 통하여

다른 클래스에서 형식적으로 접근할 수 있는 방법이 제공되는 것이다.

 

일반적으로 하나의 프로퍼티는 값을 지정하는 셋-접근자(set-accessor)와

값을 참조하는 겟-접근자(get-accessor)로 구성된다.

프로퍼티는 마치 필드처럼 참조할 수 있으며 배정문의 왼쪽에서 사용하면

셋 - 접근자가 호출되고 배정문의 오른쪽에서 사용되면 겟 - 접근자가 호출된다.

 

using System;
class PropertyClass{
	private int privateValue;
    public int PrivateValue {
    	get {return privateValue;}
        set {privateValue = value;}
    }
}

class PropertyApp{
	public static void Main(){
    	int n;
        PropertyClass obj - new PropertyClass();
        obj.PrivateValue = 100;
        obj.PrintValue();
        n = obj.PrivateValue;
        Console.WriteLine("			Value = " + n);
    }
}

 

 

 

델리게이트



델리게이트란 메소드를 참조하기 위한 방법론으로 C#에서는 주로 이벤트와

스레드를 처리하기 위한 프로그래밍 기법으로 사용된다.

델리게이트는 C/C++ 언어에서의 함수 포인터와 유사한 기능을 제공하지만

함수 포인터는 객체 지향적이며 타입 안정적이다.

 

델리게이트를 정의하고 델리게이트의 객체를 생성하는 것은

기본적으로 클래스를 정의하고 클래스의 객체를 만드는 것과 비슷하다.

다만, 델리게이트 객체를 통하여 메서드를 호출한다는 점이 특징적이다.

 

델리게이트를 정의하기 위해서는 먼저 델리게이트 객체를 통해 호출할 메소드를 작성해야한다.

메소드가 작성되면 그에 해당하는 델리게이트를 정의해야 하며,

이때 델리게이트 형태와 메소드 형태가 정확히 일치해야 한다.

 

<델리게이트 정의 예시>

delegate void SampleDelegate(paramList);	// 델리게이트 정의
class DelegateClass{
	public void DelegateMethod(paramList) {	// 델리게이트할 메소드
    	// ...
    }
}

 

 

델리게이트할 메소드를 결정하고 델리게이트를 정의했다면,

델리게이트 객체를 생성하면서 메소드를 연결해야 한다.

이 경우에, 해당 델리게이트의 매개변수로 메소드 이름을 명시해준다.

 

<예시>

DelegateClass obj = new DelegateClass();
SampleDelegate sd = new SampleDelegate(obj.DelegateMethod);

 

이러한 과정을 통하여 생성된 델리게이트 객체 sd를 호출하면

객체 DelegateClass 안에 정의된 메소드 DelegateMethod()가 호출되는 것이다.

다음은 델리게이트에 대한 예제이다.

 

using System;
delegate void SampleDelegate();		// 델리게이트 정의
class DelegateClass{
	public void DelegateMethod(){
    	Console.WriteLine("In the DelegateClass.DelegateMethod ... ");
    }
}


class DelegateApp{
	public static void Main(){
    	DelegateClass obj = new DelegateClass();
        SampleDelegate sd = new SampleDelegate(obj.DelegateMethod);
        sd();
    }
}

 

sd가 델리게이트 객체이며 DelegateMethod()가 연결되어 있다.

따라서 sd를 호출하면 DelegateMethod()가 호출되는 것이다.

 

 

 

이벤트



이벤트란 사용자 행동에 의해 발생하는 사건을 의미하며

어떤 사건이 발생한 것을 알리기 위해 보내는 메시지로 간주할 수 있다.

다시 말해서,

객체에 발생한 사건을 자신이나 다른 객체에 통지하여

그에 대한 행위를 하도록 시키는 구조를 말하며

그래픽 사용자 인터페이스 프로그래밍에서 많이 사용되는 기법이다.

 

인터페이스(GUI : Graphical User Interface) 프로그래밍에서 많이 사용되는 기법이다.

C#에서는 델리게이트를 이용하여 이벤트를 처리하며,

프로그래밍 순서는 다음과 같다.

 

  1. 처리하려는 이벤트 처리기를 위한 델리게이트를 정의한다.
    아니면, C#에서 기본적으로 제공하는 System.EventHandler 델리게이트를 이용한다.
    만일, System.EventHandler 를 사용한다면 이 과정을 생략한다.

    delegate void MyEventHandler();

  2. 델리게이트를 이용하여 이벤트를 선언한다.
    미리 정의된 이벤트(predefined event)인 경우에는 이 과정을 생략한다.

    event MyEventHandler MyEvent;

  3. 이벤트 처리를 담당하는 메소드(이벤트 처리기)를 작성한다.

    void Method(){ /* . . . */ }

  4. 이벤트에 이벤트 처리기를 등록한다.

    MyEvent += new MyEventHandler(Method);

  5. 마지막으로 이벤트를 발생시킨다.
    하지만, 미리 정의된 이벤트는 사용자 행동에 의해 이벤트가 발생하게 된다.

    if (MyEvent != null) MyEvent();

 

해당 기능을 사용한 코드는 다음 예제 코드와 같다.

 

 

using System;
class EventApp{
	public EventHandler MyEvent;							// 2. 이벤트 선언
    void MyEventHandler(object sender, EventArgs e){		// 3. 이벤트 처리기 작성
    	Console.WriteLine("Hello world");
    }
    public EventApp(){										// 생성자
    	this.MyEvent += new EventHandler(MyEventHandler);	// 4. 이벤트 처리기 등록
    }
    public void InvokeEvent(){
    	if(MyEvent != null)
        	MyEvent(this, null);
    }
    public static void Main() {
    	new EventApp().InvokeEvent();
    }
}

 

'프로그래밍 언어 > C#' 카테고리의 다른 글

C# out 키워드  (0) 2024.07.27
C#  (0) 2023.12.17