확장 메소드 (Extension Methods)
C#에서 이미 만들어진 클래스에 메소드를 추가하는 방법에 대하여 알아보자.
확장 메소드란?
프로그래밍을 하다보면 이미 만들어진 클래스에 새로운 메소드를 추가해야 할 때가 생긴다.
직접 만든 클래스라면 메소드를 추가하여 수정이 가능하지만, 남이 만든 클래스(라이브러리, C# 기본 제공 클래스 등)는 소스코드를 수정할 수 없다.
대표적인 대안으로 부모클래스를 상속하여 자식클래스에서 메소드를 추가해 확장하는 방법이 있는데, 이는 메소드가 추가될 뿐인데 상속을 유발하기 때문에 프로그램 설계상 가장 좋은 방법은 아니다.
C#은 상속을 하지 않고도 이미 만들어진 클래스에 새로운 메소드를 추가 확장할 수 있는 방법을 제공하며, 이를 확장 메소드(Extension method) 기법이라고 한다.
적용
/// <summary>
/// 계산기 클래스
/// </summary>
public class Calculator
{
public Calculator()
{
}
public int Plus(int a, int b)
{
return a + b;
}
public int Minus(int a, int b)
{
return a - b;
}
}
위 소스코드처럼 더하기, 빼기 메소드가 있는 어떤 Calculator 클래스가 주어졌다고 가정해보자.
Calculator의 인스턴스는 Plus 메소드와 Minus 메소드만 사용할 수 있다.
계산기인데 더하기와 빼기 밖에 없는 것이다. 여기에 확장 메소드 기법을 사용하여 곱하기와 나누기 기능을 추가로 넣어보도록 하자.
/// <summary>
/// 확장 메소드들을 정의할 정적 클래스
/// </summary>
public static class Extension
{
public static int Times(this Calculator calculator, int a, int b)
{
return a * b;
}
public static int Divide(this Calculator calculator, int a, int b)
{
return a / b;
}
}
확장 메소드 기법을 사용하기 위해서는 아래 규칙을 순서대로 지켜야 한다.
1. 확장 메소드들을 정의할 클래스를 static으로 선언한다.
2. 정의한 클래스 내부에 확장하고 싶은 메소드를 static으로 선언한다.
3. 첫 번째 파라미터로 메소드가 포함되어질 클래스를 this 포인터와 같이 적어준다.
4. 그 뒤로는 메소드가 요구할 나머지 파라미터들을 순서대로 적어준다.
위 작업을 모두 끝냈다면 성공적으로 기존 클래스에 메소드를 확장했다고 할 수 있다.
확장한 후 다시 Calculator의 인스턴스를 사용하는 화면이다. Plus, Minus만 있던 아까와 달리 새로 확장한 Times, Divide 메소드까지 사용할 수 있게 되었다.
(※ 확장을 했는데도 보이지 않는다면 소스파일에 Extension 클래스의 네임스페이스를 using으로 포함시켜보자)
실행해보면 잘 동작한다.
'Programming > C#' 카테고리의 다른 글
[C#] C# 라이브러리 패키지를 Github Actions를 이용하여 NuGet에 배포하는 방법 (0) | 2023.12.15 |
---|---|
[C#] 빌드 시 실행파일(exe) 이름 변경하기 (0) | 2020.10.25 |
[C#] string + string 과 StringBuilder.Append() 차이 (0) | 2019.09.23 |
[C#] 프로젝트에 DLL 추가하기 (2) | 2019.03.08 |
[C#] DLL 추출하기 (0) | 2019.02.15 |
댓글