티스토리 뷰

C#

enum 열거형

란텔 2016. 3. 2. 20:57

열거형은 사용자 정의 타입이다.


기본형 중에서도 숫자와 관련된 타입(int, long, double, short 등등)을 상속받아 정의할 수 있다.


기본형식은

[접근제한자] enum enum명

{

  식별자1, 식별자2, 식별자3 .......

}

처럼 사용




  enum Today : byte
    {
        Monday, Tuesday, Wednesday
    }

    enum Olympians
    {
        Zeus, Hera, Poseidon = 10, Athena, Ares = 20, Aphrodite
    }

다음은 enum을 정의한 것으로

Today와 Olympians이다.


Today처럼 상속을 받으면 해당 기본형타입을 토대로 사용하며, 상속받는 타입이 없을 경우(Olympians경우)에는 기본적으로 int(System.Int32)를 상속받는다.


enum은 각 식별자마다 자리 값을 가지고 있으며, Today의 경우 0부터 차례대로 1씩 증가한 값을 갖는다.

Monday = 0, Tuesday = 1, Wednesday = 2


Olympians의 경우에는 일부 식별자를 자릿값을 할당 해줬는데 이때의 각 자릿수의 값은

Zeus = 0, Hera = 1, Poseidon = 10, Athena = 11, Ares = 20, Aphrodite = 21

의 자릿수 값을 갖는다. 자릿값을 선정한 식별자 다음에 자릿값을 선정하지 않은 식별자가 온다면 +1이 더해진 값으로 자릿값이 할당된다.






Today to = Today.Monday;
            //console문에서는 Monday를 출력한다. 자릿수인 0이 출력될 것 같지만
            //Object의 ToString을 enum에서 재정의 해서 식별자를 문자열로 리턴한다.
            Console.WriteLine(to);

            Today to1 = (Today)1;
            //enum은 각각의 식별자 값에 순서 값을 가지고 있다. 0부터 시작한다.
            //1이 Today변수 to1에 할당하면 1에 해당하는 자리(0부터 시작이므로 두번째) 식별자 Tuesday를 출력한다.
            Console.WriteLine(to1);

            byte i = (byte)to1;
            //이런식으로 해당 자리값을 출력할 수도 있다.
            Console.WriteLine(i);

            Olympians o = Olympians.Poseidon;
            Console.WriteLine(o);
            //지정한 자릿값인 10이 출력된다.
            Console.WriteLine((int)o);

            Olympians o2 = (Olympians)3;
            //3이라는 자릿값은 없기 때문에 o2는 그냥 숫자 3을 리턴한다.
            Console.WriteLine(o2);


            Today today = Today.Monday | Today.Tuesday;
            //enum의 HasFlag 메서드를 사용하면 해당하는 값을 포함하고 있는지 검사할 수 있다.
            Console.WriteLine(today.HasFlag(Today.Wednesday));


            Console.WriteLine(today);


Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday