열거형은 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