확장함수란 미리 정의된 함수 이외에 사용자가 편하게 개발을 할 수 있도록(편하게 개발 하기 위하여 개발을 또 해야한다니)
사용자 추가 함수를 얘기한다.
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 |