728x90
Unity 개발을 하다 보면 특정 기능을 여러 스크립트에서 반복적으로 사용해야 하는 경우가 많습니다. 이때 확장 메서드(Extension Method) 를 활용하면 기존 클래스의 코드를 수정하지 않고도 기능을 추가할 수 있어 코드의 재사용성과 가독성을 크게 향상시킬 수 있습니다.
1. 확장 메서드란?
확장 메서드는 C#의 기능 중 하나로, 기존 클래스의 코드를 수정하지 않고도 새로운 메서드를 추가할 수 있는 기능입니다. 주로 static 클래스를 이용하여 특정 타입(클래스, 구조체 등)에 새로운 메서드를 정의할 수 있습니다.
확장 메서드의 특징
- 기존 클래스를 수정하지 않고도 새로운 기능 추가 가능
- static 클래스를 사용하며, 확장 대상 메서드는 this 키워드를 사용하여 정의
- 재사용성이 높아 코드 중복을 줄일 수 있음
2. 확장 메서드 사용법
기본적인 확장 메서드 예제
public static class Extensions
{
public static void ResetTransform(this Transform transform)
{
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
transform.localScale = Vector3.one;
}
}
코드 설명
- Extensions라는 static 클래스를 만듦
- ResetTransform이라는 확장 메서드를 정의하며 this Transform transform을 사용하여 Transform 클래스의 인스턴스를 확장
- transform.position, rotation, localScale을 초기화하는 기능을 추가
이제 Unity에서 Transform 컴포넌트를 가진 오브젝트에서 아래처럼 간단히 사용할 수 있습니다.
void Start()
{
transform.ResetTransform();
}
이렇게 하면 transform을 간단하게 초기화할 수 있습니다.
3. Unity에서 활용하기
확장 메서드는 Unity에서 다양한 방식으로 활용될 수 있습니다. 아래에 몇가지 예제를 만들어봤습니다.
1) 벡터 연산을 쉽게 처리하는 확장 메서드
public static class Extensions
{
public static Vector3 WithX(this Vector3 vector, float x)
{
return new Vector3(x, vector.y, vector.z);
}
public static Vector3 WithY(this Vector3 vector, float y)
{
return new Vector3(vector.x, y, vector.z);
}
}
사용 예시:
Vector3 newPosition = transform.position.WithX(5f); // X 값만 변경
3) UI 텍스트 자동 업데이트
public static class Extensions
{
public static void SetTextColor(this Text text, Color color)
{
if (text != null)
{
text.color = color;
}
}
}
사용 예시:
myText.SetTextColor(Color.red); // 텍스트 색상을 빨간색으로 변경
4) 배열 및 리스트 관련 확장 메서드 추가
피셔-예이츠 알고리즘을 이용한 배열/리스트 셔플
public static class Extensions
{
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
for (int i = n - 1; i > 0; i--)
{
int j = Random.Range(0, i + 1);
(list[i], list[j]) = (list[j], list[i]);
}
}
}
사용 예시:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
numbers.Shuffle(); // 리스트를 무작위로 섞음
배열/리스트에서 랜덤 요소 1개 선택하기
public static class Extensions
{
public static T GetRandomElement<T>(this IList<T> list)
{
if (list == null || list.Count == 0)
return default;
return list[Random.Range(0, list.Count)];
}
}
사용 예시:
List<string> names = new List<string> { "철수", "영희", "맹구" };
string randomName = names.GetRandomElement(); // 리스트에서 랜덤하게 하나 선택
4. 확장 메서드를 사용할 때 주의할 점
- 남용하면 가독성이 저하될 수 있음
- 클래스의 멤버 함수와 동일한 이름을 사용하지 않도록 주의
- Null 체크를 반드시 포함해야 안전한 코드 작성 가능
5. 정리
- 확장 메서드는 기존 클래스의 기능을 확장하는 강력한 도구
- Unity에서 Transform, Vector3, GameObject 등 다양한 컴포넌트 확장 가능
- 반복되는 코드 줄이고 유지보수를 쉽게 할 수 있음
- 배열 및 리스트 관련 메서드도 확장 가능하여 편리한 데이터 조작 가능
- Null 체크와 가독성을 고려하여 적절히 활용하는 것이 중요
728x90
'Unity > 정보' 카테고리의 다른 글
[Unity] transform.root - 최상위 객체 찾기 (0) | 2025.03.23 |
---|---|
[Unity] AudioSource.PlayClipAtPoint (0) | 2025.03.23 |
[Unity] Script Execution Order 설정 (스크립트별 실행 순서 설정) (0) | 2025.03.12 |
[Unity] Newtonsoft Json 설치 방법 (0) | 2025.02.23 |
[Unity] Unity6 Physics 2D : 2D 콜라이더 병합, Rigidbody2D API 변경 (0) | 2025.02.15 |