전체 코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Rookiss_CSharp
{
// https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1?srsltid=AfmBOopkXVxKs-MQPYZkTjEYW-yIDMO5xP7l5hQq0hQasUWhobvyKO6N
// 57강 대리자(Delegate)
class Program
{
// 대리 : 대신해서 처리해주는
// 사장님 전화 -> 비서가 받음 -> 비서에게 용건/연락처 등 전달(인자로 함수 넘김) -> 연락 달라고 함(콜백)
// UI : 공격 버튼을 클릭하면 플레이어가 공격함
// 버튼을 눌렀을때
static void ButtonPressed(/* 함수 자체를 인자로 넘겨주고 */OnClicked clickedFunction)
{
// 행동 : 플레이어 공격
// PlayerAttack();
// 현실적으로 여러움(설계적, 현실적 문제)
// 설계적 : 여기에 버튼을 눌렀을떄 일어나는 코드를 넣게 되면, UI 로직과 게임로직이 얽힘, 서로 분리를 시키는게 장기적 차원에서 좋음
// 현실적 문제 : 여기 안에 있는 코드를 수정할 수 없는게 빈번하게 발생함
// 예를 들어 Console.WriteLine(); 처럼 사용하기는 하지만, 내부 코드를 직접 수정한적은 없음(수정할 수도 없음)
// ButtonPressed()가 Console.WriteLine();처럼 수정할 수 없게 배포될 경우가 굉장히 많음(유니티도 Core부분은 우리가 수정할 수 없음)
// 즉, 함수자체를 인자로 넘겨주고, 이 코드 내에서 함수를 호출하는 방법으로 가야 됨
// 함수를 호출(); // 콜백
clickedFunction();
// 이처럼 함수 자체를 인자로 넘겨주고 나중에 함수를 역으로 호출하는 방식을 콜백이라고 함
}
// delegate : 함수 자체를 인자로 넘겨주는 방식(형식은 형식인데, 함수 자체를 인자로 넘겨주는 그런 형식)
// 선언방식 : delegate 반환타입 형식
// 반환 : int, 형식의 이름 : OnClicked, 입력(인자) : void
delegate int OnClicked();
// 즉, int를 반환하고 아무것도 안받는(void) 형식의 함수를 하나 만들어야함
static int TestDelegate()
{
Console.WriteLine("Hello Delegate");
return 0;
}
static int TestDelegate2()
{
Console.WriteLine("Hello Delegate2");
return 0;
}
static void Main(string[] args)
{
// ButtonPressed(TestDelegate); // 함수 자체를 인자로 넘김
// 내부적
// 이 방법으로 할 시 체이닝 가능(여러개의 함수를 동시에 넘겨줄 수 있음)
OnClicked clicked = new OnClicked(TestDelegate);
clicked += TestDelegate2;
ButtonPressed(clicked);
// clicked(); // 자체 호출이 가능
}
}
}
출처
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문| Rookiss - 인프런 강
현재 평점 4.9점 수강생 6,987명인 강의를 만나보세요. 기초 프로그래밍 지식이 없는 사람들을 위한 C# 프로그래밍 기초 강의입니다. 문법 암기 위주의 수업이 아니라, 최대한 필요한 부분만을 요
www.inflearn.com
57강 Delegate(대리자)
'C# > 기본 문법' 카테고리의 다른 글
| C# lambda(람다) (0) | 2025.12.14 |
|---|---|
| C# Event(이벤트) (0) | 2025.12.14 |
| C# Property(프로퍼티) (0) | 2025.12.14 |
| C# Interface(인터페이스) (0) | 2025.12.14 |
| C# Generic(일반화), Boxing(박싱)과 Unboxing(언박싱) (0) | 2025.12.14 |