#35 switch식

국기웅·2024년 6월 12일

switch식을 배우게 되면서 워낙 생소한 개념이기도 하고, 잘 쓰면 편리해 보이기도 해서 조금 더 공부해보았다.

switch식은 C# 8.0에서부터 지원하는 방식으로, 기존 switch문의 case부분을 간결하게 표현한 것이다.
기본적인 구조는 아래와 같다

(패턴/값) => 수식

Func<float, float, float> operation = modifier.statsChangeType switch
{
    StatsChangeType.Add => (current, change) => current + change,
    StatsChangeType.Multiple => (current, change) => current * change,
    _ => (current, change) => change,
};

위 식은 .Add 로 수치 둘을 더하는 연산을 진행한다.
Multiple은 서로 곱하는 연산을 진행한다.
_ 는 Default를 의미하며, 받은 값 그대로 입력된다.

위 문법은 저런 계산식도 가능하지만 아래와 같은 구조로도 가능하다

public static class SwitchExample
{
    public enum Direction
    {
        Up,
        Down,
        Right,
        Left
    }

    public enum Orientation
    {
        North,
        South,
        East,
        West
    }

    public static Orientation ToOrientation(Direction direction) => direction switch
    {
        Direction.Up    => Orientation.North,
        Direction.Right => Orientation.East,
        Direction.Down  => Orientation.South,
        Direction.Left  => Orientation.West,
        _ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
    };

    public static void Main()
    {
        var direction = Direction.Right;
        Console.WriteLine($"Map view direction is {direction}");
        Console.WriteLine($"Cardinal orientation is {ToOrientation(direction)}");
        // Output:
        // Map view direction is Right
        // Cardinal orientation is East
    }
}

enum을 다른 enum으로 바꾸어 주는 코드이다.
화살표 우측 식에서 계산해야할 구문이 길다면 case문을 사용하는 것이 가독성이 올라갈 것으로 보이지만, 위의 예시들처럼 간단하다면 switch식을 사용하면 정말 편리할 것 같다.
다만 비교적 최신 기능이기에 남용은 좋지 않다고 한다..

추가로, 첫 예시 코드에는 다음과 같은 부분이 있다.

Func<float, float, float> operation = modifier.statsChangeType switch{

}

이 부분은 float 2개를 받아 float을 리턴하는 "델리게이트" 이다.

조금 더 공부해서 활용법을 더 확장시키면 좋을 것 같다..

profile
게임개발호소인

0개의 댓글