내가 일하며 알게 된 프로그래밍
article thumbnail

확장함수란 미리 정의된 함수 이외에 사용자가 편하게 개발을 할 수 있도록
(편하게 개발 하기 위하여 개발을 또 해야한다니)

사용자 추가 함수를 얘기한다.

C# 3.0부터 지원된다지만 현재 사용중인 유니티의 버전들은

아무리 낮아도 5.x버전 이상을 사용할 것이라고 생각되기 때문에

그냥 만들어서 쓰면 된다.

 

빠르게 알아보자

내가 기본적으로 많이 사용하는 (확장)함수는 ToString() 이 아닐까 싶다.

변수.ToString();

그냥 말그대로 To - String  문자열 형태로 보낸다

 

물론 ToString안에 많은 파라미터값들을 줌으로써 표시방법을 다르게 할 수도 있지만,

이 글에서는 다루지 않는다.

위처럼 기능을 편하게 만들어서 사용하는

자체적으로 만들어서 많이 애용하고 있는 확장함수들을 소개해볼까 한다.

 

-Transform 초기화
(Instantiate(~)로 생성한 후 주로 사용한다, parent(부모값을 주면 부모의 설정도 할 수 있게 설정))

public static void InitTransform(this Transform trans, Transform parent = null)
{
	if (parent != null)
		trans.SetParent(parent);

	trans.localPosition = Vector3.zero;
	trans.localRotation = Quaternion.identity;
	trans.localScale = Vector3.one;
}

 

-enum 타입 형변환 귀찮음으로 만듬
(enum 타입 앞에 (int) 쓰기 귀찮아서 사용)

public static int ToInt(this Enum enumValue)
{
	return Convert.ToInt32(enumValue);
}

 

-enum에 Description 을 붙인 후 사용

public enum EnumType
{
	[Description("표시하려는 값")]
	Enum1,
}

public static string ToDesc(this EnumType type)
{
	var da = (DescriptionAttribute[])(type.GetType().GetField(type.ToString())).GetCustomAttributes(typeof(DescriptionAttribute), false);
	string desc = da.Length > 0 ? da[0].Description : "";
	return desc;
}

 

-List의 셔플

public static void Shuffle<T>(this IList<T> list)
{
    System.Random rng = new System.Random();
    int n = list.Count;
    while (n > 1)
    {
        n--;
        int k = rng.Next(n + 1);
        T value = list[k];
        list[k] = list[n];
        list[n] = value;
    }
}

기타 등등

파라미터 값 (this -> 어떤 자료형에 확장시킬지) 과

반환 값(어떤 자료형으로 반환시킬지) 를 생각하며

함수의 내용을 채워나가면 된다.


진행중인 프로젝트마다 필요한 확장함수는 다 다르겠지만

기본적으로 어떤 프로젝트든 있다면 개발의 속도를 올려주는 확장함수들이 있을것이다.

당장에 이런 확장함수들을 만드는 시간이 소모되겠지만

자주 사용 하는 확장함수들이 하나씩 쌓이다보면 확장함수의 편리함을 느낄 것이다.

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

Static 클래스  (0) 2023.07.31
C# Array, List, ArrayList 차이  (0) 2023.04.23
C# String과 StringBuilder  (0) 2023.04.15
우선순위 큐? - 근데 이제 SortedDictionary 를 곁들인...  (0) 2023.04.15
C# 8.0의 달라진 Switch문  (2) 2021.12.28
profile

내가 일하며 알게 된 프로그래밍

@CtrlVGames