Unity/Tips

Unity 확장 메서드 사용

최애뎡 2022. 1. 19. 18:27
728x90
반응형

아름다운 C#은 확장 메서드를 제공한다.

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

 

확장 메서드 - C# 프로그래밍 가이드

C#에서 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 추가할 수 있습니다.

docs.microsoft.com

doc 또한 아름답다. [ 여러 블로그나 google로 정리되어있는 내용을 찾아보는 것은 당연하지만 doc는 항상 체크 ]

 

-> doc 가장 마지막 내용이 핵심

=> List<T> 또는 Array와 같은 IEnumerable<T> 형식의 인스턴스 뒤에 "dot"를 입력하면 IntelliSense 문 완성에서 이러한 추가 메서드를 볼 수 있습니다.

 

이 아름다운 기능을 Unity에서 어떨 때 쓰면 좋을지 바로 보도록 하면

프로그래밍을 하면서 본인의 라이브러리를 구축하기 마련인데 예로

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

public class Test : MonoBehaviour
{
    public GameObject _go = null;

    private void Start()
    {
        TestExtension();
    }

    void TestExtension()
    {
        Naming(_go, "test");
    }

    public void Naming(GameObject go, string name)
    {
        go.name = name;
    }
}

이런 식으로 Naming()을 자주 사용한다 가정했을 때

보통이라면 위와 같이 Naming()을 사용해야 하지만

 

위처럼 결국 내용이 적용될 GameObject에서도 Naming()을 바로 불러서 사용할 수 있게 해주는 것 

사용 방법도 간단한데

 

using UnityEngine;

public class Utils : MonoBehaviour
{
    public static void Naming(GameObject go, string name)
    {
        go.name = name;
    }
}

확장 메서드를 사용하기 위해서는 정적으로 선언해야 하기 때문에 이런 식으로 본인의 Utility 스크립트를 만든다 치고

 

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

public static class Extension
{
    public static void Naming(this GameObject go, string name)
    {
        Utils.Naming(go, name);
    }
}

확장 메서드도 따로 모아둬야 보기도 좋고 하니 따로 스크립트 하나 이런 식으로 파준다 치고 확장 메서드를 사용할 메서드를 그대로 가져온 뒤 this만 사용해 주면 끝나는 느낌..

-> GameObject go 앞에 this를 통해 go. 뒤에 확장으로 메서드가 나와주고 go.Naming을 했을 때 Utils.Naming()에 들어가 줘서 바로 적용을 시키는 것

 

예시다 보니 간단하지만 이를 통해 무궁무진하게 조금의 수고를 덜어줄 수 있음

+

조금의 수고를 덜어주는 듯 하지만 정말 자주 사용해야 할 경우에 특히 매우 좋음

 

* 그러나 협업 시 너무 난무해서 사용하기보단 적절히 당연히 적절히..

반응형