관리 메뉴

심재운 블로그

C# 의 열거형(enumeration) 에 대한 설명 본문

닷넷관련/CSharp

C# 의 열거형(enumeration) 에 대한 설명

재우니 2009.02.12 00:53


이번에는 열거형에 대해서 살펴보죠.

열거형이란 무엇일까요? 우선 닷넷프레임웍에서 발췌한 것을 한번 살펴보죠.

System.Enum에서 상속되어 내부 기본 형식 값에 대한 별칭을 제공하는 특별한 유형의 값타입입니다. 열거형은 이름, 내부 형식 및 필드 집합을 가지며, 내부 형식은 기본 제공되는 부호 있는 정수 및 부호 없는 정수 형식(Byte, Int32, UInt64 등) 중 하나여야 합니다. 각 필드는 상수를 나타내는 정적 리터럴 필드입니다. 사용자가 사용하는 각 언어는 각 필드에 내부 형식의 특정값을 할당합니다.


엄청 길죠? 그냥 이렇게 한번 생각을 해보죠. 

열거형은 사용자가 정의한 정수의 형식이다~~~. 선언은 열거형의 인스턴스가 포함할 수 있는 어떤 특정한 값들의 집합을 정의해야 한다~~. 


그럼 열거형은 무엇을 하는곳에 쓰일까요? 클래스를 보통 작업하다 보면 클래스의 property 를 여러가지 기술하게 되는데요. 이 중에 하나를 선택할 때 이 열거형이 유용하게 쓰인답니다.

그럼 장점도 있겠죠...

사용하면, 변수가 적절한 값으로 할당이 되었는지 확인을 할 수 있음과 동시에 코드 유지보수가 수월하다는 점...
어떤 깊은 뜻(?)이 있는 숫자를 문자열로 나타내어 코드를 쉽게 만들어 줄수 있는 장점... 그러므로 인해 코드를 입력하기가 쉽다는 점입니다.



그럼 간단한 소스 하나 볼까요?


using System;

public enum Money
{
    ihwang = 1000, //이황
    ii = 5000, //이이
    sejong = 10000 //세종대왕
}

class MoneyTest
{
    public static int Main()
    {
        SearchMoney(Money.ihwang);
        return 0;
    }

    static void SearchMoney(Money money)
    {
        switch (money)
        {
            case Money.ihwang:
                {
                    Console.WriteLine("천원짜리");
                    break;
                }
            case Money.ii:
                {
                    Console.WriteLine("오천원자리");
                    break;
                }
            case Money.sejong:
                {
                    Console.WriteLine("만원짜리");
                    break;
                }
            default:
                {
                    Console.WriteLine("몰라유..");
                    break;
                }
        }
    }
};



결과값은?  "천원자리"라고 출력이 됩니다.




자.~~~ 열거형을 선언 할때는 enumeration 을 줄여서 enum 이라고 합니다. Money.ihwang 이라고 하면 프로퍼티를 이용하여 1000을 나타냅니다. 따라서 열거형은 적절한 값을 메소드에 넘겨주기 위해서 사용되거나 위의 소스처럼 swich 문을 적절히 이용하여 사용합니다.


또 다른 소스를 한번 살펴보죠. 배열을 사용하는 방법입니다.


using System;
class EnumTest
{
    enum Numbers { one, two, three, four, five, six, seven };
    public static void Main()
    {
        int[] num = new int[7];
        num[0] = (int)Numbers.one;
        num[1] = (int)Numbers.two;
        num[2] = (int)Numbers.three;
        num[3] = (int)Numbers.four;
        num[4] = (int)Numbers.five;
        num[5] = (int)Numbers.six;
        num[6] = (int)Numbers.seven;

        for (int i = 0; i < 7; i++)
        {
            Console.Write(num[i] + "\t");
        }//main
    }

}//class


결과값은 0 1 2 3 4 5 6 입니다.



위 처럼 배열값을 할당하여 사용할 수 있습니다. 열거형을 사용할려면 먼저 형변환을 해주어야 합니다. 기본값이 정수형이기
때문이죠. 따라서 배열에 할당을 할 경우 문자열을 숫자형으로 형변환을 위해서 (int)Numbers.one; 이런식으로 앞에 (int)를 기재해 줍니다.

배열은 0부터 시작하기 때문에 위와 같은 결과값이 나옵니다. 참고로 vb 은 1부터 시작한답니다.
대충 저런방법도 있는구나 ~~ 라고 생각하시면 됩니다.

이렇게 value 형식에는 구조체와 열거형 두가지가 있다는 점을 참고해 주시기 바랍니다


posted by 심재운 (shimpark@gmail.com)


1 Comments
  • 프로필사진 제일 2012.07.30 13:26 신고 처음에 이해하기 어려웠던 부분이 도대체 어느 부분에서 int[1]을 0으로 인식하는가가 가장 의문이었습니다. 상단의 예제에선 int[i] 가 one, two, three의 무엇을 보고 숫자로 대응하는지를 도저히 이해 못했었는데... 위의 Enum처럼 one,two,three 같이 아무런 대응 값을 만들지 않으면 자동으로 처음 설정된 열거형을 0으로 대응하여 순차적으로 1씩 임의로 증가시킨다는 것을 참고하시기 바랍니다.
댓글쓰기 폼