티스토리 뷰
C#에는 기존에 존재하는 클래스에 메서드를 더할 수 있는 확장 메서드(Extension Methods)라는 기능이 있다.
그렇다면 사용법을 간단하게 알아보자.
Extension Methods
public static class ClassToExtendExtensions
{
public static void ExtensionMethodName(this ClassToExtend o)
{
// Do Stuff
}
}
사용법은 그야말로 간단 그 자체다.
중요한 건 '정적 클래스에서 정적 함수로 선언해야 한다'는 것. 다시말해서 static class 안에서 static 함수로 선언해야 한다. 그리고 함수의 인수로는 반드시 this [확장 대상 클래스] 변수명이 첫 매개변수로 포함되어야 한다는 것이다.
이 조건 만 맞춘다면 다른 조건은 없다.
매개변수를 늘리는 것도 가능하고, 반환값을 바꿀수도 있는 등, 일반 메서드에서 할 수 있는 것은 다 할 수 있다.
[다만, 전역 클래스에 전역 함수다 보니 함수 호출은 다소 많이 제한적이다.]
사실상 유니티나 C# 기본 메서드 중에서 아쉬운 점을 직접 보완할 수 있는 기능으로, 알아두면 편한 경우가 많다.
가령, 처음에 언급한 벡터의 특정 값 만 바꾼다거나, 스칼라 값으로 랜덤한 방향의 벡터값을 가져온다거나...
사실상 개발자 본인이 어떤 아이디어를 그려내는 가에 따라서 크게 달라지는 기능인 셈이다.
참고로, 해당 함수를 사용하려면 다음과 같이 사용하면 된다.
ClassToExtend.ExtensionMethoeName();
즉, 원래 클래스에 존재하는 메서드와 동일한 방식으로 사용이 가능하다!
[다만, 실 동작은 ClassToExtendExtensions.ExtensionMethodName(o)과 동일하다.]
사실, 확장 메서드 자체는 클래스 외부에서 클래스의 함수를 정의하는 것이기 때문에 단일 책임 원칙을 위반하는 기능으로, 남용하는 것은 좋지 않다. 특히, 본인이 작성한 클래스에 사용하는 건 절대 금지.
[당연하지만, 한 파일에 적어도 될 걸 2개 파일에 나눠서 적는 것이다. 대표적인 스파게티 코드.]
반대로 라이브러리 클래스 등과 같이, 수정 불가능한 클래스에 추가 함수를 작성하는 용도로 사용한다면 어마어마한 활용도를 보일 수 있는 기능이기도 하다.
'스파르타 내일배움캠프 > Today I Learned' 카테고리의 다른 글
Today I Learned - Day 32 [Rigidbody - Dynamic/Kinematic/Static] (0) | 2024.10.29 |
---|---|
Today I Learned - Day 31 [움직이는 플랫폼과 유닛의 동시이동] (0) | 2024.10.28 |
Today I Learned - Day 29 [ObjectPool에 관하여] (0) | 2024.10.24 |
Today I Learned - Day 28 [Raycast] (1) | 2024.10.23 |
Today I Learned - Day 27 [제너릭 싱글톤] (1) | 2024.10.22 |