C# Extensions Method를 Unity에 활용하기

2018. 10. 24. 06:35·프로그래밍/Unity

C# Extensions Method


C# 3.0부터 추가된 기능입니다. 이 기능을 사용하게 되면 기존 형식을 확장, 수정하지 않고도 메소드를 추가할 수 있습니다. Microsoft .NET 문서 에선 일반 메서드를 호출하나 Extensions Method를 호출하나 명백한 차이가 없다고 서술하고 있습니다.



사용용도


이 기능은 어느 클래스에나 사용할 수 있기 때문에 특정한 범위에서 사용하는 것이 좋습니다. 일반적으로 상속이 불가능한 (봉인된(sealed)) 클래스에 필요한 기능을 추가할 수 없을 때가 가장 적합한것 같습니다.


사용방법


확장 메소드의 사용방법은 생각보다 간단합니다. String 클래스에 단어갯수를 확인하는 확장 메소드를 만들어보겠습니다. 


1
2
3
4
5
6
7
8
9
10
11
namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}
Colored by Color Scripter
cs


이렇게 static 클래스를 만들고 정의해주게 되면, string 객체를 사용하면서 추가로 WordCount라는 함수가 생기게 되고,

일반 string 내장 함수처럼 사용할 수 있게됩니다.


++ Extensions Method의 생성 조건


1. 클래스는 static으로 선언해줍니다. ( 자동으로 함수도 static )

2. 매개변수의 첫 번째는 this와 해당 메소드가 들어갈 타입을 적어줍니다.



기타 설명 

더 자세한건 [Microsoft .NET 문서](https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods#general-guidelines) 를 참고하길 바랍니다~



Unity + Extensions Method


이 기능을 유니티에 가져와 적용해본다면 기존에 불필요하게 했던 작업을 함수 하나로 보기 좋게 정리할 수 있게 됩니다!! ( WOW )


기존에 유니티 기능으로만 사용했을 때 불편한 작업이 있었습니다..


+ transform.position의 x값만 바꾸고 싶을 때

+ Sprite의 Color중 Alpha 값만 바꾸고 싶을 때

+ 배열에서 랜덤을 뽑고 싶을 때 ( 물론 이건 C#이지만..ㅋ )


등등 상황에 따라 더 있겠지만 저런 상황에 Extensions Method 기능을 사용하면 매우 편리합니다.


첫 번째 경우를 가지고 설명하자면 Unity의 Transform 클래스에 Extensions Method를 추가하면 좀 더 코드가 깔끔해지고 보기 편해집니다.


TransformExtensions.cs

1
2
3
4
5
6
7
8
9
10
using UnityEngine;
 
public static class TransformExtensions
{
    public static void SetPositionX(this Transform transform, float x)
    {
        var newPosition = new Vector3(x, transform.position.y, transform.position.z);
        transform.position = newPosition;
    }
}
Colored by Color Scripter
cs

Test.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using UnityEngine;
 
public class Test : MonoBehaviour
{
    private void Start()
    {
        // 이전의 X값 변경 방법
        transform.position = Vector3.zero;
        Debug.Log("[Basic] Prev: " + transform.position);
        transform.position = new Vector3(20, transform.position.y, transform.position.z);
        Debug.Log("[Basic] Curr: " + transform.position);
 
        // Extensions Method
        transform.position = Vector3.zero;
        Debug.Log("[Extensions] Prev: " + transform.position);
        transform.SetPositionX(20);
        Debug.Log("[Extensions] Curr: " + transform.position);
    }
}
Colored by Color Scripter
cs


마무리

Extensions Method는 클래스의 수정이 불가능한 부분들에 의한 반복적인 일들을 줄여줄 수 있는 매우 좋은 기능 입니다.

유니티로 개발을 하면서 어쩔 수 없이 반복적이고 불필요한 코드들이 늘어난다면 이 기능을 이용해 리팩토링하는 것도 좋을 것 같습니다.

저작자표시 비영리 변경금지 (새창열림)

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

[Xcode] Xcode 때문에 생기는 맥 용량 부족 해결  (0) 2020.08.29
[Unity] 유니티 안드로이드 Gradle 빌드 오류 상세보기  (3) 2019.12.26
[Unity] 2D 게임개발하면서 여러가지 에셋을 써본 후기  (0) 2017.07.21
[Unity] IronSource - 게임에 다양한 광고를 달아보자  (9) 2017.04.15
[Unity] ugui에서 멀티터치를 막고싶을때  (0) 2017.03.03
'프로그래밍/Unity' 카테고리의 다른 글
  • [Xcode] Xcode 때문에 생기는 맥 용량 부족 해결
  • [Unity] 유니티 안드로이드 Gradle 빌드 오류 상세보기
  • [Unity] 2D 게임개발하면서 여러가지 에셋을 써본 후기
  • [Unity] IronSource - 게임에 다양한 광고를 달아보자
LongMan
LongMan
Better than Yesterday
  • LongMan
    긴맨의 블로그
    LongMan
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • 프로그래밍 (3)
        • Unity (15)
        • C# (2)
      • 리뷰 (6)
        • 책 독후감 (6)
      • 여행 (4)
        • 해외여행 (2)
        • 등산 (2)
      • 일상 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    이펙티브 C#
    문제풀이
    C#
    해커랭크
    알고리즘 문제풀이
    독서
    HackerRank
    자유여행
    방학여행
    IOS
    javascript
    정렬
    책리뷰
    해커랭크 문제풀이
    독후감
    Android
    서평
    책 정리
    코토리
    개발
    Unity
    프로그래밍
    build
    프로그래밍도서
    일본음식
    빌드
    Effective C#
    유니티
    이펙티브 씨샵
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
LongMan
C# Extensions Method를 Unity에 활용하기
상단으로

티스토리툴바