내일배움캠프

내일배움캠프내일배움캠프 게임개발 과정 8일차: Delegate

pracumj 2024. 9. 23. 22:16

오늘 공부한 내용📝

오늘은 C#에서 delegate라는 개념을 배웠다. 처음에는 왜 이걸 써야 하는지 좀 헷갈렸지만, 직접 코드를 작성해 보면서 그 유용성을 느끼게 되었다. delegate는 메서드를 대신 호출해주는 역할을 한다. 

왜 delegate를 사용해야 할까?🤔

처음에는 단순히 메서드를 직접 호출하는 것과 뭐가 다른지 의문이 들었다. 하지만 delegate를 사용하면 여러 메서드를 한 번에 호출할 수 있고, 메서드를 매개변수로 전달할 수 있어 코드의 유연성이 높아진다. delegate를 사용하면서 만족스러웠던 부분은 특정 클래스의 메서드 활용의 자유도가 상당히 높아진다는 점이었다. 

코드 예시: 몬스터 처치 후 보상 처리

몬스터를 처치하면 코인, 경험치, 포인트를 모두 적립해줘야 하는 상황이 있다고 가정해보자.

이때, delegate를 사용하지 않고 각각의 메서드를 호출하면 코드가 중복되고 복잡해질 수 있다.
하지만 delegate를 사용하면 이러한 문제들 없이 한 번의 호출로 여러 보상 메서드를 처리할 수 있게 된다.

//delegate 선언
public delegate void RewardDelegate(int coin, int point, int exp);

public class Program
{
    static int userCoin = 0;
    static int userPoint = 0;
    static int userExp = 0;

    // 보상을 위한 메서드들
    static void PlusCoin(int coin, int point, int exp) => userCoin += coin;
    static void PlusPoint(int coin, int point, int exp) => userPoint += point;
    static void PlusExp(int coin, int point, int exp) => userExp += exp;

    static void Main(string[] args)
    {
        // delegate에 메서드들 등록
        RewardDelegate reward = PlusCoin;
        reward += PlusPoint;
        reward += PlusExp;

        // delegate로 보상 호출
        reward(100, 30, 40);

        // 결과 출력
        Console.WriteLine($"코인: {userCoin}, 점수: {userPoint}, 경험치: {userExp}");
    }
}

위 코드처럼 delegate여러 메서드를 할당하고 한 번에 호출할 수 있다는 점이 정말 편리했다!

마무리😺

아직까지 프로그래밍을 하면서 "여기서 delegate를 써야겠다!"라는 상황이 많이는 없었지만, 앞으로 개발을 진행하다 보면 분명 적절하게 사용할 수 있는 순간이 올 테니 delegate라는 개념을 잊지 않고 기억해뒀다 더 나은 코드와 구조를 위해 언제든지 delegate를 유연하게 사용할 수 있도록 해야겠다!