반응형
728x170
역시나 해석 그대로다.
메서드 확장하는 것이다.
알아보자
정의부터 하자면
기존 내장 되어있는 소스들을 수정 안해도
사용자 정의 메서드를 추가할 수 있는 것이다.
** 이것이 목적이라고 보는 게 맞겠다.
ex) Transform 같은 경우 내장되어 있어서 일반적으로 접근이 불가능하다.
Generic이 아니면서 static 클래스에서만 정의되며 static 메서드로 정의한다.
-> 그냥 static 메서드로 인식 되지 않고 확장 메서드로 인식되는 이유는
this 키워드로 "첫번째" parameter를 받기 때문이다.
**만약 매개변수가 더 필요하면 그 때는 this를 붙이지 않고 입력해야 한다.
**여기서 this는 2가지 역할을 한다.
1. 어느 클래스의 확장 메서드가 될지 결정한다.
2. 해당되는 클래스의 객체를 불러온다.
(그래서 실제 사용에선 객체를 자동으로 불러오기에 매개변수를 안 쓴다.)
-> 밑에 예시를 보면 확장메서드에 파라미터를 필요로 하지 않는다.
++확장 메서드는 우리가 일반적으로 클래스에서 정의해서 쓰는 인스턴스 메서드와 똑같이 사용한다.
**다만 기존에 정의된 메서드와 같은 확장 메서드가 있을 경우 주의해야한다.
-> 근데 대부분 안 겹친다.
예를 들어서 보자
ExtensionMethods
using UnityEngine;
using System.Collections;
//확장 메서드는 static 클래스에서 정의되어야 한다.
public static class ExtensionMethods
{
//또한 확장메서드도 static으로 선언되어야 한다.
//그리고 첫번째 매개변수는 this 키워드가 사용되어야 한다.
//여기 밑에 Transform이 사용된 것처럼
//첫 번째 매개변수의 의미는 어떤 클래스의 확장메서드가 될 것이냐이다.
//여기서는 Transform 클래스가 되겠다.
public static void ResetTransformation(this Transform trans)
{
//Transform을 매개변수로 받기 때문에 아래 변수들이 사용가능해진다.
trans.position = Vector3.zero;
trans.localRotation = Quaternion.identity;
trans.localScale = new Vector3(1, 1, 1);
}
}
SomeClass
using UnityEngine;
using System.Collections;
public class SomeClass : MonoBehaviour
{
void Start () {
//확장메서드를 사용하려면 그저 우리는 무슨 클래스의 확장메서드인지만 기억하면 된다.
//여기선 Transform이었다.
//그래서 아래와 같이 확장메서드를 사용할 수 있다.
transform.ResetTransformation();
}
}
참고링크
728x90
반응형
그리드형
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
싱글톤의 특징, Singleton [Unity] (0) | 2021.03.30 |
---|---|
Namespace, 네임스페이스 [Unity] (0) | 2021.03.29 |
유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity] (4) | 2021.03.28 |
Interface, 인터페이스 [Unity] (0) | 2021.03.28 |
Overriding, 덮어쓰기, 오버라이딩 [Unity] (0) | 2021.03.27 |