Posted in: C# 언어, Unity, 메서드 & 팁 정리

C# Action | 리턴 형식이 없고 매개변수가 없는 델리게이트를 쉽게 선언

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Worker : MonoBehaviour
{
    delegate void Work();
    Work work;

    void MoveBricks()
    {
        Debug.Log("벽돌을 옮겼다.");
    }

    void DigIn()
    {
        Debug.Log("땅을 팠다.");
    }

    private void Start() {
        work += MoveBricks;
        work += DigIn;            
    } 

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            work();
        }
    }
}

델리게이트는 선언할때 데이터 타입과 입력받는 매개변수를 지정할 수 있습니다. 물론 함수를 등록할 때 타입이 같아야 델리게이트에 등록할 수 있습니다.

위와 같은 스크립트가 있고 위 스크립트는 벽돌을 옮기는 기능과 땅을 파는 기능이 있습니다. 게임이 시작되면 Start 함수에 의해 두 함수를 델리게이트 work에 등록했습니다. Update 함수를 통해 Space를 입력하면 work를 호출합니다.

Space를 입력하면 등록한 두 함수를 정상적으로 호출합니다.

그런데 리턴 타입이 void고 매개변수가 없는 함수는 많이 작성하게 됩니다. 마찬가지로 타입이 같은 델리게이트도 많이 작성하게 되죠.

그래서 C# 개발자들은 리턴 타입이 void고 매개변수가 없는 델리게이트를 C# 내부에 선언해 놓았습니다.

그것이 Action 함수입니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// Action 함수를 사용하기 위해
using System;

public class Worker : MonoBehaviour
{
    //delegate void Work();
    //Work work;
    
    Action work;

    void MoveBricks()
    {
        Debug.Log("벽돌을 옮겼다.");
    }

    void DigIn()
    {
        Debug.Log("땅을 팠다.");
    }

    private void Start() {
        work += MoveBricks;
        work += DigIn;            
    } 

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            work();
        }
    }
}

굳이 번거롭게 델리게이트를 선언하지 않아도 Action 타입을 사용해 쉽게 사용할 수 있습니다.

결과는 바꾸기 전 스크립트와 동일합니다.

Tags:

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다