1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
using System;
namespace WindowsFormsApp1
{
interface ISource
{
int GetResult();
}
class Source : ISource
{
public int GetResult() { return 10; }
public void Test()
{
Target target = new Target();
}
}
class Target : ISource
{
public int GetResult() { return 20; }
public void Do(ISource obj)
{
Console.WriteLine(obj.GetResult());
}
public static void Main()
{
Source so = new Source();
Target target = new Target();
target.Do(so);
target.Do(target);
ISource aa = new Target();
Console.WriteLine(aa.GetResult());
}
}
}
|
cs |
인터페이스를 사용하는 이유를 알 수 있는 매우 간결한 코드이다.
인터페이스를 사용하여 콜백을 구현한 코드로서,
물론 콜백에서 인터페이스 객체가 아닌 실제 객체를 입력값으로 설정하여도 무방하나,
인터페이스 객체를 파라미터로 설정함으로서 상속받은 클래스들의 구현부가 동작해야 할 경우,
다형성의 강점을 이용하여 코딩하는것이 가능 하다.
1
2
3
4
|
Source so = new Source();
Target target = new Target();
target.Do(target);
target.Do(target);
|
cs |
즉 위와 같은 코드에서 target.Do() 함수를 호출하는데 있어서
업 캐스팅을 이용해 아무런 자식 객체를 넣어도 잘 실행되는것을 확인할 수 있다.
이런 콜백은 Delegate 를 이용해서도 구현이 가능하다.
더불어, 이러한 콜백 외에도
그냥 특정 함수를 특정 클래스가 구현하였다는 표식 대용으로 사용할때가 있다.
다만 이런경우는 Doxygen 같은곳에 시각적으로 나타내기 위한 용도 외에는 개인적으로 사용하지 않을것 같다.
'Programming > C#' 카테고리의 다른 글
[C#] 델리게이트와 이벤트의 차이점 (0) | 2021.03.04 |
---|---|
[C#] IEnumerable 인터페이스 상속 및 객체 열거형 만들기 (0) | 2021.03.03 |
[C#] 형변환 [as, is] (0) | 2021.02.27 |
[C#] Thread, Task 의 간단한 사용법 (0) | 2020.12.01 |
[C#] C++ DLL 을 사용하기. (0) | 2020.09.09 |