프로그래밍 농장

액션 / 람수표현식 함수 [ Unity ] 본문

C#

액션 / 람수표현식 함수 [ Unity ]

Tennessee201 2022. 7. 13.
728x90

액션 : C#에서 제공하는 사용하기 쉽게 제공하는 delegate

람다 : 코드 도중에 이름이 없는 함수를 탄생시키고 이를 다양하게 사용가능하다. 


기존 delegate 함수의 사용방식 : 

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

public class Worker : MonoBehaviour
{
    //입력, 출력이 없는 함수 대행 (delegate)
    delegate void Work();

    Work work;

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

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

    //Work라는 델리게이트를 만들어놓고 위처럼 할일들만 대행시켜놓는것

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

 

위와 같이 델리게이트 함수 Work() 를 생성해놓고, 이 델리게이트 함수에 MoveBricks() 와 DigIn() 두가지 함수를 대행하고록 위와같이 추가하여주는 방식이다. 

하지만, 위와 같은 방식을 사용할 경우, 수많은 델리게이트 함수와 대행 함수를  수없이 생성해주어야한다. 

 

이때 아래와 같이 delegate void Work();  // 델리게이트 함수  를 없애고, 

using System; 추가한후

기존 Work 타입의 Work work();   -->   Action타입의 Action work(); 로 통일할수있다. 

좀 더 간편한 버전의 유니티에서 제공해주는                    delegate 함수라고 생각하면 된다.

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

public class Worker : MonoBehaviour
{


    Action work;

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

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

    //Work라는 델리게이트를 만들어놓고 위처럼 할일들만 대행시켜놓는것

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

+ 람다식 함수


람다표현식은 특정 변수나 함수명을 지정하지않고, 실시간으로 선언 및 적용할수있는 방식의 표현식이다.

아래와 같이 

public void hit (man) {

     Debug.Log(" i hit " + man ); }

 

처럼 함수를 선언후 hit( )  을 가져와 사용할수도있지만, 아래와 같이 람다표현법으로 즉시 사용도 가능하다. 

man => Debug.Log(" i hit " + man ); 

   

728x90