표현식 본문 멤버 및 파라미터 set 심화버전, 파라미터 델리게이트 적용 예시

2024. 11. 18. 11:49카테고리 없음

표현식 본문 멤버란?

C#에서 => 연산자를 사용해 메서드나 속성의 본문을 한 줄로 표현할 수 있는 기능이다.

언제 사용하는가?

메서드나 속성의 내용이 단순히 한 줄로 끝나는 경우에 사용

메서드에 => 적용하기

함수에서 코드가 한줄 들어가므로 => 연산자를 사용해서 간견하게 작성했다.

사용 예시1

public enum SceneType
{
    StartScene,
    MapChoiceScene,
    CarScene,
    LevelScene,
    MainScene
}

public class GameManager : MonoSingleton<GameManager>
{
    public void LoadScene(SceneType sceneType)
    {
        SceneManager.LoadScene($"{sceneType.ToString()}");
    }

    // Button 전용 메서드
    public void LoadStartScene() => LoadScene(SceneType.StartScene);
    public void LoadMapChoiceScene() => LoadScene(SceneType.MapChoiceScene);
    public void LoadCarScene() => LoadScene(SceneType.CarScene);
    public void LoadLevelScene() => LoadScene(SceneType.LevelScene);
    public void LoadMainScene() => LoadScene(SceneType.MainScene);
}

사용 예시2

public int GetNumber() => 42;

 

단순 값을 반환하기만 할때 그냥 반환값을 적으면 된다.

밑에 코드랑 위에코드랑 기능이 같다.

public int GetNumber()
{
    return 42;
}

정리

본문이 한 줄로 끝나는 메서드에 괄호( {} )넣는 대신에 => 이거 사용, 반환값만 반환할려고 할떄  => 이거 사용하면 바로 반환

 

속성에 => 적용하기

변하는 필드값에 의해서 값이 변화할때 사용하면 좋음
private int _health = 100;
private int _damage = 20;

public int Health => _health;

public int AttackPower => _damage * 2;

public bool IsAlive => _health > 0;

파라미터set에 적용 예시

public class Player
{
    private int _health;

    // 체력 속성
    public int Health
    {
        get => _health;
        set
        {
            _health = value;
            IsAlive = _health > 0; // 체력 변경 시 생존 상태도 업데이트
        }
    }

    // 생존 상태는 체력에 따라 결정
    public bool IsAlive { get; private set; }

    // 현재 상태 메시지
    public string Status => IsAlive ? "Alive" : "Dead";
}

파라미터set 델리게이트 적용 예시

public class Example
{
    public delegate void LevelChangedHandler(int newLevel);
    public event LevelChangedHandler OnLevelChanged;

    private int _level;
    public int Level
    {
        get => _level;
        set
        {
            _level = value;
            OnLevelChanged?.Invoke(_level); // 델리게이트 호출
        }
    }
}