Anonymous Method(무명 메서드)
개요
- 무명메서드를 하기위해서는 Delegate를 알아야 할 필요가 있다.
1.Delegate
- 메서드를 참조하는 변수이다. 델리게이트는 메서드를 대신해서 호출하는 역할을 한다.
- 하나의 Delegate로 여러 메서드를 호출할 수 있다.
public delegate int CalDelegate(int a, int b); //델리게이트 선언
public class Anonymous
{
// 델리게이트로 덧셈할 메서드
public int Plus(int operandA, int operandB)
{
return operandA + operandB;
}
// 뺄셈할 메서드
public int Minus(int operandA, int operandB)
{
return operandA - operandB;
}
}
[TestClass]
public class AnonymousTest
{
[TestMethod]
public void AnonymousTest()
{
// 테스트 코드 선언부
// operandA, operandB와 덧셈, 뺄셈 결과값
int plusResult = 13;
int minusResult = 5;
int operandA= 9, operandB = 4;
// 클래스 객체 델리게이트 객체 생성
Anonymous anonymous = new Anonymous();
CalDelegate plus = new CalDelegate(anonymous.Plus);
CalDelegate minus = new CalDelegate(anonymous.Minus);
// 결과
Assert.AreEqual(plusResult, plus(operandA, operandB));
Assert.AreEqual(minusResult, minus(operandA, operandB));
}
}
- 사실 이와 같이 델리게이트를 쓰는 것은 큰 의미가 없다. 메소드를 직접 호출하면 되기 때문이다. 델리게이트의 진정한 가치는 “콜백메서드”를 구현할 때에 나타난다.
2. Callback Method
- Callback은 A라는 메서드를 호출할 때에 B라는 메서드를 넘겨주어 A메서드로 하여금 B메서드를 호출하도록 하는 것을 말한다.
//델리게이트 선언
public delegate int CalDelegate(int operandA, int operandB);
public class Anonymous
{
// 콜백할 메서드 추가
public int Calcul(int operandA, int operandB, calDelegate del)
{
return del(operandA, operandB)
}
// 델리게이트로 덧셈할 메서드
public int Plus(int operandA, int operandB)
{
return operandA + operandB
}
// 델리게이트로 뺄셈할 메서드
public int Minus(int operandA, int operandB
{
return operandA - operandB
}
}
[TestClass]
public class AnonymousTest
{
[TestMethod]
public void AnonymousTest()
{
// 테스트 코드 선언부
// operandA, operandB와 덧셈, 뺄셈 결과값
int plusResult = 13;
int minusResult = 5;
int operandA= 9, operandB = 4;
// 클래스 객체 델리게이트 객체 생성
Anonymous anonymous = new Anonymous();
CalDelegate plus = new CalDelegate(anonymous.Plus);
CalDelegate minus = new CalDelegate(anonymous.Minus);
// 결과
Assert.AreEqual(plusResult, anonymous.CalCulator(operandA, operandB, plus));
Assert.AreEqual(minusResult, anonymous.CalCulator(operandA, operandB, minus));
}
}
3. Anonymous Method
- 모든 메서드는 이름을 가진다. 하지만 C#에는 이름이 없는 무명 메서드를 제공한다. 무명메서드는 이름이 없기 때문에 델리게이트 변수를 사용한다.
- 문법이 직관적이게 되서 가독성이 높아진다.
//델리게이트 선언
public delegate int CalDelegate(int operandA, int operandB);
public class Anonymous
{
// 콜백할 메서드 추가
public int CalCulator(int operandA, int operandB, CalDelegate del)
{
return del(operandA, operandB);
}
}
[TestClass]
public class AnonymousTest
{
[TestMethod]
public void AnonymousTest()
{
// 테스트 코드 선언부
int plusResult = 13; // a+b 덧셈값
int minusResult = 5; // a-b 뺄셈값
int operandA= 9, operandB = 4;
// 클래스 객체 델리게이트 객체 생성
Anonymous anonymous = new Anonymous();
// 더하기 빼기 무명 메서드
CalDelegate An_plus = delegate(int deleOperandA, int deleOperandB)
{
return operandA + operandB;
};
CalDelegate An_minus = delegate(int deleOperandA, int deleOperandB)
{
return operandA - operandB;
};
// 결과
Assert.AreEqual(plusResult, anonymous.CalCulator(a, b, An_plus));
Assert.AreEqual(minusResult, anonymous.CalCulator(a, b, An_minus));
}
}
- 테스트코드에서 무명메서드를 이용하여 class1의 코드수가 많이 줄었음을 볼 수 있다.