thumbnail

멋쟁이사자처럼 유니티 게임 개발 부트캠프 수강 후기

멋쟁이사자처럼 유니티 게임 개발 부트캠프 15기 수강후기

멋쟁이사자처럼 오늘 공부 후기 챌린지 - 유니티 게임 개발 편

이런 고민을 하고 있다면, 지금 이 순간에도 멋쟁이사자처럼에서 유니티 게임 개발 부트캠프를 수강하며 자신만의 속도로 성장 중인 수강생들을 주목해보세요.


배우고 잊어버리는 건 누구나 겪는 일이에요. 하지만 멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 고민하고 있어요. 그렇다면, 배운 것을 가장 효과적으로 습득하는 방법은 무엇일까요? 바로 기록하고 정리하는 것이죠. 배운 내용을 정리하고 기록하면, 기억은 오래 남고 실전에서도 활용할 수 있으니까요!

멋쟁이사자처럼 부트캠프는 수강생들이 배운 내용을 정리하고 공유할 수 있도록 TIL (Today I Learned) 블로그 챌린지를 진행하고 있어요. 그래서 오늘, 강사님과 멘토님에게 배운 내용을 체계적으로 기록하며 성장하고 있는 수강생의 이야기를 가져왔어요. 작고 사소해 보일지라도 배운 내용을 정리하고, 기록하면서 성장한 이들의 소중한 경험을 지금 확인해 보세요.


델리게이트(Delegate)는 C#에서 메서드를 참조하는 타입입니다.

즉, 델리게이트를 사용하면 메서드를 변수처럼 다룰 수 있고, 런타임에 동적으로 실행할 메서드를 변경할 수 있습니다.

  핵심 개념

  • 메서드를 가리키는 포인터 역할을 합니다.

  • 동일한 시그니처(매개변수 & 반환형)를 가진 메서드만 참조할 수 있습니다.

  • += 연산자로 여러 개의 메서드를 하나의 델리게이트에 등록할 수 있습니다. (➡ 멀티캐스트 델리게이트)

  • 델리게이트는 이벤트(event) 구현에도 사용됩니다.

Plaintext
// 1. 델리게이트 선언delegate void MessageHandler(string message);
// 2. 델리게이트에 연결할 메서드static void DisplayMessage(string message)
{
    Console.WriteLine($"메세지: {message}");
}

static void DisplayUpperMessage(string message)
{
    Console.WriteLine($"대문자 메세지: {message.ToUpper()}");
}

// 3. 델리게이트 변수 선언 및 메서드 연결
MessageHandler messageHandler = DisplayMessage;

// 4. 델리게이트 호출
messageHandler("안녕하세요");

// 5. 델리게이트에 여러 메서드 추가 (멀티캐스트 델리게이트)
messageHandler += DisplayUpperMessage;

// 6. 여러 메서드가 연결된 델리게이트 실행
messageHandler("Hello");

기능

설명

단일 메서드 참조

하나의 메서드를 델리게이트 변수에 할당하여 실행

멀티캐스트 델리게이트

여러 개의 메서드를 하나의 델리게이트에 등록하고 한 번에 실행

익명 메서드 및 람다 표현식

델리게이트를 사용하여 익명 메서드 또는 람다 함수 적용 가능

이벤트 처리

이벤트(Event) 시스템에서 핵심적인 역할 수행

  • *이벤트(Event)**는 특정 동작이 발생했을 때 실행되는 메서드를 연결하는 방식입니다.

C#에서는 델리게이트(delegate)를 기반으로 이벤트를 구현하며, 주로 UI 프로그래밍, 게임 개발, 비동기 프로그래밍 등에서 활용됩니다.

1. 이벤트 정의

Plaintext
public event EventHandler OnDamaged;
  • event 키워드를 사용하여 이벤트를 선언합니다.

  • EventHandler는 C#에서 제공하는 기본 델리게이트 타입으로, object sender, EventArgs e 시그니처를 갖는 메서드만 연결할 수 있습니다.

  • 이벤트는 외부에서 직접 호출할 수 없고, += 와 -= 연산자로만 추가/삭제 가능합니다.

2. 이벤트 발생

Plaintext
public void TakeDamage(int amount)
{
// 체력 감소
    Health -= amount;
    Console.WriteLine($"{Name}이 {amount}의 데미지를 입었습니다. 남은 체력: {Health}");

// 이벤트 발생 (구독자가 있는 경우에만 실행)
    OnDamaged?.Invoke(this, EventArgs.Empty);
}
  • EventArgs.Empty : 추가 데이터가 필요하지 않을 때 사용

3. 이벤트 핸들러 메서드 정의

Plaintext
static void Hero_OnDamaged(object sender, EventArgs e)
{
// sender를 Character 타입으로 변환
    Character character = (Character)sender;
    Console.WriteLine($"이벤트 알림: {character.Name}이 데미지를 입었습니다!"
        + $" 현재 체력: {character.Health}");
}
  • 이벤트가 발생하면 실행될 메서드(이벤트 핸들러)를 정의합니다.

  • 이벤트 핸들러의 시그니처는 EventHandler 델리게이트와 일치해야 합니다.

    • object sender : 이벤트를 발생시킨 객체

    • EventArgs e : 이벤트와 관련된 추가 정보

4. 이벤트 구독 및 실행

Plaintext
// 1. 캐릭터 객체 생성
Character hero = new Character("용사", 100);

// 2. 이벤트 구독 (메서드 등록)
hero.OnDamaged += Hero_OnDamaged;

// 3. 데미지 입히기 -> 이벤트 발생
hero.TakeDamage(30);
  • += 연산자를 사용하여 OnDamaged 이벤트에 Hero_OnDamaged 메서드를 등록합니다.

  • hero.TakeDamage(30);를 실행하면, 이벤트가 발생하여 Hero_OnDamaged가 실행됩니다.

5. 이벤트 구독 해제

Plaintext
// 이벤트 구독 해제 (더 이상 이벤트가 발생해도 실행되지 않음)
hero.OnDamaged -= Hero_OnDamaged;
Console.WriteLine("이벤트 구독 취소");

// 데미지를 입어도 이벤트 핸들러가 실행되지 않음
hero.TakeDamage(20);
  • = 연산자를 사용하면 이벤트 구독이 해제됩니다.

  • 이후 hero.TakeDamage(20);을 실행해도 이벤트 핸들러가 실행되지 않습니다.

이벤트 선언

event 키워드 사용 (public event EventHandler OnDamaged;)

이벤트 구독

+= 연산자로 이벤트 핸들러 메서드 등록

이벤트 발생

OnDamaged?.Invoke(this, EventArgs.Empty);

이벤트 해제

-= 연산자로 이벤트 핸들러 등록 해제

Action 델리게이트는 매개변수를 받고 반환값이 없는 메서드를 참조하는 델리게이트입니다.

C#에서 미리 정의된 델리게이트로, 직접 델리게이트를 선언하지 않고도 사용할 수 있습니다.

Plaintext
Action<T1, T2, ..., TN>
  • 최대 16개의 매개변수를 받을 수 있음 (T1 ~ TN)

  • 반환값이 없는(void) 메서드만 참조 가능

Plaintext
using System;

class Program
{
    static void PrintMessage(string message)
    {
        Console.WriteLine($"메시지: {message}");
    }

    static void Main()
    {
// Action 델리게이트 선언 및 메서드 할당
        Action<string> messageAction = PrintMessage;

// Action 호출
        messageAction("안녕하세요!");
    }
}

✔ Action<string>은 매개변수 하나를 받는 메서드를 참조할 수 있습니다.

Action을 익명 함수(람다식)와 함께 사용할 수도 있습니다.

Plaintext
Action<int, int> add = (a, b) => Console.WriteLine($"결과: {a + b}");
add(5, 10);// 결과: 15

✔ 매개변수 2개를 받아 더한 값을 출력하는 람다식을 Action<int, int>에 저장했습니다.

Plaintext
class Program
{
    static void PrintMessage(string message)
    {
        Console.WriteLine($"메시지: {message}");
    }

    static void PrintUpperMessage(string message)
    {
        Console.WriteLine($"대문자 메시지: {message.ToUpper()}");
    }

    static void Main()
    {
// 여러 개의 메서드를 Action에 추가
        Action<string> messageAction = PrintMessage;
        messageAction += PrintUpperMessage;

// 호출하면 두 개의 메서드가 실행됨
        messageAction("Hello, World!");
    }
}

✔ 여러 개의 메서드를 연결하여 한 번의 호출로 실행 가능합니다.

구분

Action

일반 Delegate

선언 방식

미리 정의됨

직접 선언해야 함

반환값

없음 (void)

자유롭게 설정 가능

매개변수 개수

최대 16개

제한 없음

사용 예시

Action<int>

delegate void MyDelegate(int x);


공부는 배울 때 끝나는 게 아니라, 되새기고 활용할 때 완성돼요. 그런 의미에서 오늘 소개한 이야기는 단순한 후기가 아니라, 학습을 더 효과적으로 만들고 나만의 것으로 만드는 과정이었을 거예요. 여러분도 배운 내용을 정리하고, 더 오래 기억하는 습관을 만들어 보세요. 작은 차이가 결국 큰 결과를 만들 테니까요!

내가 배운 것을 글로 정리하는 것이 처음에는 어렵게 느껴질 수도 있지만 멋쟁이사자처럼과 함께 꾸준히 기록하다 보면 스스로 변화하고 있다는 걸 깨닫게 될 거예요. 자! 이제 여러분 차례에요. 언제나 여러분의 곁에는 멋쟁이사자처럼이 있으니 고민하지 말고 배움을 기록하고, 성장의 발자취를 남겨보세요!

홈 : 멋사 부트캠프

멋쟁이사자처럼의 13년 교육 노하우로 IT 취업의 꿈을 현실로!

홈 : 멋사 부트캠프