Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- 깊이 우선 탐색
- Back Tracking
- pccp 기출문제 3번
- Hp바
- C#
- 충돌위험 찾기
- 플레이어 방향전환
- Object Pooling
- pccp 기출문제 1번
- 2D슈팅게임
- Algorithm
- Object Poling
- 플레이어 이동
- 오브젝트 풀링
- Blend Type
- raycasting
- 유니티
- Lv2
- Ainimation Blending
- CSharp #자료구조
- Scrooling
- Hpbar
- ASTAR
- LayerMark
- pccp 기출문제 2번
- heap tree
- 너비 우선 탐색
- Unity
- Animation State Machine
Archives
- Today
- Total
주녘공부일지
[C#] 대리자(delegate) vs 인터페이스(interface) 본문
대리자(delegate)와 인터페이스(interface)를 비교하기 위해 같은 기능을 하는 간단한 예제를 들고 후술
1) 대리자 (Delegate)
https://godgjwnsgur7.tistory.com/122
ex) 제네릭 형식에 제네릭 형식 매개변수를 둔 예시
public delegate T Transformer<T> (T arg);
public class Util
{
public static void Transform<T> (T[] values, Transformer<T> t)
{
for(int i = 0; i < values.Length; i++)
value[i] = t(values[i]);
}
}
public Test
{
static void Main()
{
int[] values = { 1, 2, 3 };
Util.Transform {values, Square); // Square 변환 적용
foreach(int i in values)
Console.Write(i + " "); // 1 4 9
}
static int Square(int x) => x * x;
}
2) 인터페이스 (Interface)
https://godgjwnsgur7.tistory.com/104
ex) 위 예제를 대리자 대신 인터페이스를 이용한 예시
public interface ITransformer
{
int Transform(int x);
}
public class Util
{
public static void TransformAll(int[] values, ITransformer t)
{
for(int i = 0; i < values.Length; i++)
values[i] = t.Transform(values[i]);
}
}
class Squarer : ITransformer
{
public int Transform(int x) => x * x;
}
...
static void Main()
{
int[] values = { 1, 2, 3 };
Util.TransformAll(values, new Squarer());
foreach(int i in values)
Console.Write(i + " "); // 1 4 9
}
대리자(Delegate) vs 인터페이스(Interface)
대리자로 해결이 가능한 문제는 인터페이스로도 해결할 수 있음
- 하지만, 인터페이스를 이용한 설계에서는 변환마다 개별적인 형식을 작성할 수 밖에 없기 때문에 비슷한 코드를 중복으로 작성해야 하는 등의 번거로운 작업이 필요해질 수 있음
ex) 비슷한 코드를 중복으로 작성하는 예제
class Squarer : ITransformer
{
public int Transform (int x) => x * x;
}
class Cuber : ITransformer
{
public int Transform (int x) => x * x * x;
}
...
static void Main()
{
int[] values = { 1, 2, 3 };
Util.TransformAll (values, new Cuber());
foreach(int i in values)
Console.Write(i + " "); // 1 8 27
}
즉, 다음 조건 중 하나 이상이 참이라면 인터페이스를 이용한 설계보다 대리자를 이용한 설계가 더 유리할 수 있으므로 고려해볼 필요가 있음
1) 인터페이스가 메서드를 하나만 정의
2) 다중 캐스팅 능력 필요
3) 구독자가 인터페이스를 여러 번 구현해야 함
참고도서) C# 6.0 완벽가이드
'Programming > Definition, Etc' 카테고리의 다른 글
[C# Reference] 우선순위 큐 ( Priority Queue ) + Heap (0) | 2024.02.02 |
---|---|
[C#] 이벤트 (Event) + 표준 이벤트 패턴, 이벤트 접근자&수정자 (0) | 2023.11.15 |
[C#] 대리자 (Delegate - Action, Func) (0) | 2023.11.10 |
[C#] 제네릭 (Generic) (0) | 2023.10.27 |
[C#] 열거형 (enum type) (1) | 2023.10.15 |