문제 상황
namespace Delegate
{
internal class FileName
{
public void ShowMenu()
{
int age = 0;
// 전형적인 OCP를 위반하는 코드.
// 나라가 추가될 때마다 else if 문이 추가됨.
// 참고로 아래 if문 조건은 편의상 간단하게 적은 것임.
if ("KOREA")
age = GetAge_Korea();
else
age = GetAge_Japan();
}
private int GetAge_Korea()
{
return 0;
}
private int GetAge_Japan()
{
return 0;
}
}
}
해결법
위 코드에서 나라별 달라지는 부분은 나이 계산 함수 뿐이다.
그러면? 나이 계산 함수를 ShowMenu 밖으로 빼버린다.(= 나이 계산 함수를 파라미터로 받는다)
함수를 파라미터로 받기 위해서는 함수를 담는 변수가 필요하다.
-> 이게 바로 Delegate
namespace Delegate
{
internal class FileName
{
public delegate int GetAgeDelegate();
public void Test()
{
// 한국이면
ShowMenu(GetAge_Korea);
// 일본이면
ShowMenu(GetAge_Japan);
// 이곳에서 나라에 따라 ShowMenu가 적절히 호출되도록 로직 구현
}
public void ShowMenu(GetAgeDelegate getAgeDelegate)
{
int age = getAgeDelegate();
}
private int GetAge_Korea()
{
return 0;
}
private int GetAge_Japan()
{
return 0;
}
}
}
참고 영상
[C#]델리게이트의 모든 것(All about delegate) - YouTube
'Unity > Client' 카테고리의 다른 글
| [Unity] OnBeginDrag 안되는 버그(IBeginDragHandler) (2) | 2025.08.14 |
|---|---|
| [Unity] 빌드하기 전 주의할 점 (0) | 2024.01.30 |
| [Unity] 스크롤뷰가 스크롤이 안 될 때 해결방법 (0) | 2023.06.13 |
| [Unity] Json (0) | 2023.05.18 |
| [Unity] 좌표계와 함수 (0) | 2023.05.07 |