공부일지

Delegate(대리자) - 작성중 본문

코딩/Unity

Delegate(대리자) - 작성중

이하택 2023. 10. 26. 13:03

루키스 님 - 델리게이터 부분 07:06

델리게이트의 정의

📌델리게이트 : 대리자 = 대리하는 것
  • 변수가 똑같은 로직을 다른 값으로 사용하는 것 마냥, 하나의 동작에 여러 상황이 부여되는 것.
  • 함수 자체를 인자(연락처)로 넘겨주고 함수를 호출하는 것(거꾸로 연락 주는 것).

→ 걍 함수 담는 변수. 혹은 유사 함수 포인터. → 어려운 말로 함수에 대한 참조 타입이라 한다.

델리게이트 선언

delegate 반환형 델리게이트이름(매개변수)

  • ex) delegate void SpawnDelegateFuc();

델리게이트 사용

delegate void SpawnDelegateFuc();

void Start()
{
	//델리게이트를 저장할 변수 생성
	SpawnDelegateFuc spawnAction;
	//델리게이트 변수에 함수 저장, 이때 SpawnPlayer_A는 저장만 하지 실행하는게 아니므로 괄호를 붙이지 아니한다.
	spawnAction = SpawnPlayer_A;


	InitStageData();
	SpawnPlayer();
	SpawnMonster();
}
void SpawnPlayer_ARoom() {~~}
void SpawnPlayer_BRoom() {~~}
int SpawnPlayer_CRoom() {~~~}      //반환형 차이 - 사용불가
void SpawnPlayer_BossRoom() {~~~} //매개변수 차이- 사용불가
  • 델리게이트에 사용할 함수는 반환형과 매개변수 타입이 일치해야한다.

🌊사용 흐름

SpawnPlayer() : 플레이어를 스폰하는 함수

이때 고려할 수 있는 부분은

  • 어떤 플레이어를 생성하는가?
  • 어디에 생성하는가?
  • 몇 개 생성하는가? ....

이 모든 것을 각각 별도로 작성한다면

예를 들어) UI관련 부분과 게임 로직 관련한 부분이 얽히게 됨.

  1. 따라서 하나의 기능을 파트 별로 분리하고 싶을 때
  1. 더불어 특정 함수가 시스템 측면에서 혹은 프로젝트 진행 측면에서 수정이 불가할 때(Console.WriteLine()을 수정 할 수 없는 것 처럼…)

어디에 생성하는지에 대해 초점을 맞춰본다면,

ARoom,BRoom, BoosRoom, Center ..... 셀 수 없이 많은 함수가 생긴다.

어떻게 적용할 수 있을까?

  1. 그냥 가져다가 필요할 때 꺼내서 사용한다.
  1. if문이나 switch문 같은 조건문을 사용한다.
  1. 델리게이트 선언해서 할당하고 필요한 곳에서 사용.

Q. 1,2번의 간단한 선택지가 있는데도 굳이굳이 먼 길을 돌아가야하는 이유가 무엇일까?

A. 개발에서 번거로운 짓을 한다면 대체로

🧾사용 예시(위임)

위와 같은 팝업창을 예로 들어보자.

사용할 수 있는 경우의 수는 여러가지일 것이다.

  • 캐릭터 변경
  • 캐릭터 삭제
  • 아이템 판매
  • 아이템 강화
  • 게임 종료 등등 동일한 상황에서 서라 다른 기능을 필요로 함.

🤔이 때에 적합한 해결법은 무엇이 있을까?🤔

  • 팝업 기능마다 함수를 만들어준다.
    • 불필요하게 반복되는 코드가 많아짐.
    • 확장성이 나빠짐.
  • 팝업별로 클래스를 따로 만든다.
    • 마찬가지로 위와 같이 빡셀것임.

이럴때 사용하는 것이 delegate

필요한 기능을 별도 구현하지 않고 전달 받은 기능만 실행하도록 구현.

함수의 매개변수 넘기듯 델리게이트를 넘겨버리면 해결.

class UIPopup
{
	public delegate void PopupConfirmFunc();

    public void PopupConfirm(PopupConfirmFunc confirmAction)
    {
    	confirmAction();
    }
}

위와 같이 별도로 구현해두지 않고 전달받은 기능만 실행하도록 해 여러 상황에 대응하는것을 위임이라고 하며 객체 지향의 주요 개념 중 하나이다.



Reference

내일배움캠프
국비지원 코딩, 내일배움캠프는 개발자 취업까지 자신 있습니다. 기간 제한 없는 취업 컨설팅을 받으며 비전공자 IT취업 준비, 확실히 끝내세요.
https://nbcamp.spartacodingclub.kr/game
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문 - 인프런 | 강의
기초 프로그래밍 지식이 없는 사람들을 위한 C# 프로그래밍 기초 강의입니다. 문법 암기 위주의 수업이 아니라, 최대한 필요한 부분만을 요약해서 진행합니다., MMORPG 개발에 필요한 모든 기술, C# + Unity로 Step By Step! 🕹️ [사진] 기초부터 끝판...
https://www.inflearn.com/course/유니티-mmorpg-개발-part1

Uploaded by N2T

'코딩 > Unity' 카테고리의 다른 글

스크립터블 오브젝트  (0) 2023.10.30
코드 컨벤션  (0) 2023.10.20
유한 상태 머신 (finite-state machine) - 작성중  (3) 2023.10.07
싱글톤의 변형과 제네릭 개념  (1) 2023.09.27
MonoBehaviour 추가 강의[09.21] (1)  (1) 2023.09.21