C# 문법 4주차 - Func, Action

Amberjack·2024년 1월 2일
0

C# 문법

목록 보기
30/44

Func과 Action

Func, Action?

  • FuncAction은 델리게이트를 대체하는 미리 정의된 제네릭 형식.
  • Func값을 반환하는 메서드를 나타내는 델리게이트. 마지막 제네릭 형식 매개변수는 반환 타입을 나타낸다.
    ex) Func<int, string>은 int를 입력으로 받아 string을 반환한다.
  • Action값을 반환하지 않는 메서드를 나타내는 델리게이트. Action은 매개변수를 받아들이지만, 반환타입이 없다.
    ex) Action<int, string>은 int와 string을 입력으로 받고, 아무런 값을 리턴하지 않는다.
  • FuncAction은 제네릭 형식으로 미리 정의되어 있어 매개변수와 반환 타입을 간결하게 표현할 수 있다.

Func 예제

// Func를 사용하여 두 개의 정수를 더하는 메서드
int Add(int x, int y)
{
    return x + y;
}

// Func를 이용한 메서드 호출
Func<int, int, int> addFunc = Add;
int result = addFunc(3, 5);
Console.WriteLine("결과: " + result);

Action 예제

// Action을 사용하여 문자열을 출력하는 메서드
void PrintMessage(string message)
{
    Console.WriteLine(message);
}

// Action을 이용한 메서드 호출
Action<string> printAction = PrintMessage;
printAction("Hello, World!");

사용 예제)

// 게임 캐릭터 클래스
class GameCharacter
{
	// float를 매개변수로 받는 Action
    private Action<float> healthChangedCallback;

	// health를 private으로 선언
    private float health;

	// health를 private으로 선언했기 때문에 프로퍼티를 통해 접근
    public float Health
    {
        get { return health; }
        
        // health의 값이 변경될 때(set),
        set
        {
            health = value;
            healthChangedCallback?.Invoke(health);	// healthChangedCallback 실행
        }
    }

	// 위에 선언한 Action 연결해주기
    public void SetHealthChangedCallback(Action<float> callback)
    {
        healthChangedCallback = callback;
    }
}

// 게임 캐릭터 생성 및 상태 변경 감지
GameCharacter character = new GameCharacter();

// 람다식을 활용하여 체력이 0보다 작거나 같게 되면 "캐릭터 사망!" 출력
character.SetHealthChangedCallback(health =>
{
    if (health <= 0)
    {
        Console.WriteLine("캐릭터 사망!");
    }
});

// 캐릭터의 체력 변경
character.Health = 0;

해당 코드를 쓰는 이유???

  1. 해당 코드에서는 health 값이 변경될 때마다 무조건 healthChangedCallback이 실행된다(set으로 선언해놨기 때문)
  2. healthChangedCallback Action에 HP와 관련된 기능들을 걸어놓으면 health가 변할 때마다 자동으로 실행되도록 코드를 작성할 수 있다.

0개의 댓글