--------------------------------------------------------------------------------

확장 메서드


확장 메서드란 기존 type을 수정하거나 새로운 파생 type을 만들지 않고도

특정 type에 기능을 추가하는 방법이다.

이는 클래스에 기능을 추가해야하지만 해당 클래스의 원본 소스코드를 편집할 수 없는 상황에 완벽하게 적합하다.


--------------------------------------------------------------------------------


Unity 내장 클래스인 Transform 클래스를 생각해보자

우리는 Transform이라는 클래스 안에 position, rotation, scale을 모두 초기화하는

메서드를 만들고싶다. 이 메서드의 가장 이상적인 위치는 Transform클래스 내부일것이다.

하지만 유니티의 소스코드는 접근할 수 없기 때문에 우리는 Transform 클래스에 메서드를 추가할 수 없다.

이런 경우에 확장 메서드가 유용하게 쓰인다.


--------------------------------------------------------------------------------


확장 메서드 선언 규칙



24b0d121e09c28a8699fe8b115ef046eca4acdf0

위 코드는 오브젝트의 position, rotation, scale을 모두 초기화하는 확장 메서드이다.


확장 메서드를 선언 하기 위해선 몇가지 규칙을 따라야 한다.

먼저 제네릭이 아닌 정적 클래스 안에 선언되어야 한다.

따라서 이런 확장메서드를 담기위한 전용 클래스를 만드는 게 일반적이다.


정적 클래스로 선언되었으니 멤버는 모두 정적 멤버여야 할 것이다.

따라서 확장 메서드는 static키워드를 꼭 사용한다.


매개변수에 this키워드가 사용된다.

그리고 this뒤에는 우리가 기능을 추가하고싶은 type을 적고 매개변수의 이름을 써준다.


만약 매개 변수가 더 필요하다면 this Transform tran뒤에 얼마든지 추가해줄수 있다.

중요한 것은 확장 메서드를 사용하기 위해 매개 변수에 this Type parameter를 사용해주어야 한다는 것이다.


--------------------------------------------------------------------------------


24b0d121e09c28a8699fe8b115ef0464d785e1


static으로 선언되었기 때문에 확장 메서드의 사용은 간편하다.