본문 바로가기

C#/기본 문법

C# Delegate(대리자)

 

 

 

 

전체 코드


 

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(); // 자체 호출이 가능
        }
    }
}

 

 

 

 

 

 

 


 

 

 

출처


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

 

[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