-
델리게이트와 람다[예시-팝업]TIL 2023. 10. 18. 22:46반응형
동일한 UI나 동일한 기능을 사용하는데
일부분만 달라질 때 주로 사용한다.
일부분이 달라지는 것을 사용하는 쪽에서 수정해주는것임
//델리게이트 선언(리턴값이 없을 때 Action으로 퉁칠 수 있음)
private Action OnConfirm;
***UIPopUp.cs
//파라미터 기본값을 설정할 땐, 맨 뒤부터 설정을 해야 앞의 값도 설정이 가능함
public void SetPopup(string title, string content, Action onConfirm = null)
{
txtTile.text = title;
txtContent.text = content;
OnConfirm = onConfirm;
}
void Confirm()
{
if(OnConfirm != null) //참조형(여기선 Action)의 경우엔 null값도 받아올 수 있으므로 null 체크
{
OnConfirm();
OnConfirm = null;
}
Close();
}
***UIMain.cs
//대충 버튼에 메서드 연결하는 코드(상점버튼[OpenShop] / 가방버튼[OpenInventory]..)
void OpenPopup_Shop()
{
UIPopUp popup = UIManager.Instance.OpenUI<UIPopup>();
popup.SetPopup("상점", "상점오픈??", OpenShop)
}
void OpenShop()
{
UIManager.Instance.OpenUI<UIPopup>();
}
void OpenPopup_Inventory()
{
UIPopUp popup = UIManager.Instance.OpenUI<UIPopup>();
popup.SetPopup("가방", "가방오픈??", OpenInventory);
}
void OpenInventory()
{
UIManager.Instance.OpenUI<UIPopup>();
}
+++++람다식
위 코드 OpenPopup_Shop() && OpenShop()을 보면 어느정도 반복성이 보인다.
큰 문제는 없으나 함수가 상당히 길어진다.
해당 함수가 여러번 활용된다면 상관없지만, 활용성이 낮으면 람다로 변형하는것도 좋다.
람다는 무명메소드의 일부이다.
람다
익명메소드
(파라미터) => 실행할코드
UI 코드에서 보는 예시
(message) => Console.Write(message);
void OpenPopup_Shop()
{
UIPopUp popup = UIManager.Instance.OpenUI<UIPopup>();
popup.SetPopup("상점", "상점오픈??", () => {UIManager.Instance.OpenUI<UIPopup>(); });
}
위 예시에서 활용성이 낮은 메서드인 OpenShop를 람다식으로 처리하였다.
이렇게 하여 코드가 훨씬 압축되었다. (메서드 2 -> 1)
OpenShop의 경우 OpenPopup_Shop메서드를 제외하면 사용하지 않으므로 아주 좋은 방법인듯
+람다
무명 메서드(함수)
함수를 만든다
void tempFuc()
{
}
이걸 이름없는 람다로 만든다면
람다
() => {}
ㅡ
bool tempFuc(x,y)
{
return x==y;
}
람다
(x,y) => {return x==y;}
ㅡ
*******만약 리턴만 있다면? (if 아래의 코드가 한줄인 경우 중괄호 생략과 같은 원리)
(x,y) => x==y
+람다 추가 정리
람다식을 사용한 메서드의 경우엔 활용성이 낮지만 필요한 경우가 생길 수 도있다.
람다와 관련된 자료를 찾으니 예시가 나왔다.
Action line = () => 식; //파라미터 없는경우 Action
Func<double, double> cube = (파라미터) => 식; //파라미터 있는경우
Func<int, int, bool> testForEquality = (파라미터) => x == y; //파라미터와 반환값이 있는경우
위와같이 사용은 (파라미터) => 식(혹은 식과 반환값);
변수로 선언하여 저장할 땐
Iine, cube, testForEquality와 같이 람다식과 함께 선언하여 사용하면 된다.반응형'TIL' 카테고리의 다른 글
PUN2 - 네트워크 공부(강의 정리) (1) 2023.10.24 최종 프로젝트 - 1 일차 / 플레이어 조작 로직 결정 (0) 2023.10.23 C# 10/17 - 스택(Stack)과 제네릭(Generic) (2) 2023.10.17 C# 10/13 - Input Controller 만들기 (0) 2023.10.13 10/11 - 배열과 리스트, 연결리스트 + 관련된 데이터자료 (0) 2023.10.11