Ssssong += Dev

[유니티, C#] 확장메서드 본문

개발/공부

[유니티, C#] 확장메서드

ssong_dev 2022. 6. 15. 09:44

확장 메서드란?
- 기존에 제공되는 클래스 또는 외부 라이브러리에 속해 있는 클래스에 새로운 기능을 "상속"이 아닌 메서드를 이용해서 기능을 확장하는 것을 의미한다.


확장 메서드의 특징
- C# 언어의 확장 메서드는 정적 클래스만을 통해서 정의하는 것이 가능하다.
즉, 정적 클래스가 아니면 확장 메서드 자체를 구현하는 것이 불가능하다.

- C# 언어의 확장 메서드를 정의하는 정적 클래스는 반드시 최상단 영역에 위치시켜야 한다.

- 특정 클래스의 중첩 클래스(클래스 안에 클래스를 선언한 형태)로는 확장 메서드를 정의하는 것이 불가능

 

 

 

구조체, 클래스에 기본으로 내장되어 있는 여러 메서드들 이외에

원하는 메서드를 추가하여 사용할 수 있다.

 

public static class ExtensionMethod
{
    //확장메서드
    //public static 리턴타입 확장메서드명(this 추가시키고 싶은 타입 변수명, 매개변수...)
    public static bool IsBetween(this float value, float min, float max)
    {
        if(value > min && value < max)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

이러한 확장메서드를 추가하였을 때

 

void Start()
    {
        //확장메서드를 통해 float 타입 value에 IsBetween함수를 추가하였다.
        if(value.IsBetween(min,max))
        {
            Debug.Log("value는" + min + "과" + max + "사이의 값이다.");
        }
    }

static으로 만들었기 때문에 어디서든 float.IsBetween() 처럼 추가기능을 사용할 수 있다.

 

클래스, 컴포넌트에도 마찬가지로 추가하여 사용 가능하다.

특정 부모 오브젝트를 자주 참조해야 할 때 등, 자주 쓰는 기능을 쉽게 쓸 때 유용하게 사용할 수 있다.

 

Remap이나 GetAxisAngle 등의 함수를 그간 게임매니저 인스턴스에 넣고 사용했는데 확장메서드로 더 간편하게 사용할 수 있겠다.

 

*확장메서드 만들 때는 MonoBehaviour를 상속받으면 안된다.

*어떤 기능인지 직관적으로 알아볼 수 있게 추가해야 한다.

'개발 > 공부' 카테고리의 다른 글

[C#] 델리게이트(delegate)  (0) 2022.06.17
[유니티, C#] 일반화(Generic)  (0) 2022.06.15
[유니티] 충돌 검사 짤팁  (0) 2022.06.14
[유니티, C#] foreach, 콜렉션  (0) 2022.06.14
[유니티, C#] 깊은 복사 ConvertAll  (0) 2022.06.13