[C#] 4.2 열거형

열거형은 enum 키워드를 사용하여 상수 집합 목록을 열거자 목록에 선언하여 사용될 수 있는 값의 종류를 사용자가 정의하는 형식입니다. 열거형을 정의할 때 나열할 수 있는 상수 집합 목록의 요소는 기본적으로 정수(int) 형식입니다.

enum Season{    NonSeason, Spring, Summer, Autumn, Winter   }

위의 코드는 계절을 Season 이름의 열거형을 정의한 예입니다. 이 경우에 NonSeason부터 차례대로 0, 1, 2, 3, 4에 해당하는 값으로 정의됩니다. NonSeason은 Season 형식의 기본값으로 사용할 수 있게 선언한 것으로 반드시 있을 필요는 없지만 적절한 값이 아님을 나타내기 위해 선언하였습니다. MSDN에서는 될 수 있으면 0값을 사용하지 말거나 적절한 값이 아님을 나타내기 위한 값을 선언하여 디폴트 값으로 사용하라고 권고하고 있습니다.

▶ 열거형 사용 예

class Program
{
    enum Season { NonSeason, Spring, Summer, Autumn, Winter };
    static void Main(string[] args)
    {
        Season season = Season.NonSeason;
        Console.WriteLine("계절을 입력하세요. 봄:1 여름:2 가을:3 겨울:4 ");
        season = (Season)int.Parse(Console.ReadLine());
        Console.WriteLine("입력한 계절은 {0}입니다.", season);
    }
}

▶ 실행 결과

계절을 입력하세요. 봄:1 여름:2 가을:3 겨울:4
2
입력한 계절은 Summer입니다.

그리고 개발자는 열거형 형식에 선언한 각 열거 목록의 값을 명시적으로 지정할 수 있습니다. 목록에 명시되지 않은 것은 앞 목록의 값+1이 됩니다.

enum BaseScore
{
        MinScore,
        Bad = 60,
        SoSo = 75,
        Good = 90,
        HighScore = 100
}

C#에서의 열거형에 선언된 목록의 기본값은 int 형식을 기반으로 하지만 다른 정수 형식으로 정의할 수도 있습니다. 참고로 char 형식은 불가능합니다.

enum Denomination: long
{
        Kilo =    1000,
        Mega = 1000000,
        Giga =  1000000000,
        Tera =  1000000000000,
        Peta = 1000000000000000
}

그리고 C#에서는 비트 연산을 통해 여러 열거 목록을 표현하기 쉬울 때 Flags Attribute를 명시하여 열거형을 정의하는 방법을 지원합니다.

[Flags]
enum MyFlag
{
    HasCar = 0x01,
    Married = 0x02,
    HasHouse = 0x04
}
class Program
{
    static void Main(string[] args)
    {
        MyFlag flag = MyFlag.HasCar | MyFlag.Married | MyFlag.HasHouse;
        Console.WriteLine("{0}", flag);
    }
}

▶ 결과

HasCar, Married, HasHouse