재우니의 블로그



이번에는 enumeration 을 이야기 해볼까 합니다.


ENUM 키워드에 대해서 MSDN 은 어떻게 설명을 하고 있을까요?


enum 키워드를 사용하여 열거자 목록이라고 하는 명명된 상수 집합으로 구성된 독특한 형식인 열거형을 선언합니다. 모든 열거형에는 char 형식을 제외한 임의의 정수 계열 형식이 될 수 있는 내부 형식이 있습니다. 열거형 요소의 기본적인 내부 형식은 int입니다. 기본적으로 첫 번째 열거자 값은 0이며 그 이후의 열거자 값은 순서대로 1씩 증가됩니다. 


협업에서 개발을 하시면서 ENUM 키워드를 많이 사용하고 애용할거라 생각이 듭니다.

이 부분에 대해 잘 알지 못하시는 분들을 위해서 아래의 사이트에서 지식을 얻으시기 바랍니다.


http://imadonis.springnote.com/pages/427122



이제 본론으로 넘어가서... ASP.NET 의 서버 컨트롤에 아래의 글 내용을 바인딩을 하거나 DropDownList 컨트롤에 바인딩을 하여 사용자들이 아래의 글을 보이게끔 구현을 하고자 합니다. 하지만 ENUM 은 아래와 같은 뛰엄쓰기의 문자열을 사용할 수 없습니다.


Burnt Orange

Bright Pink

Dark Green

Sky Blue



그래서 어쩔수 없이 ENUM 을 아래와 같이 구현할 수 밖에 없습니다.


public enum UserColours

{

    BurntOrange = 1,

    BrightPink = 2,

    DarkGreen = 3,

    SkyBlue = 4

}


자..하지만 우리는 단어와 단어가 같이 붙어 있어서 사용자들이 읽기엔 매우 어렵습니다. 따라서 저렇게 사용할 수 없는 부분이기도 하죠. 따라서 이를 해결하기 위해서 attribute 를 이용하여 해당 값을 추출해 올 수 있습니다.


using System.ComponentModel;


namespace Ellington.EnumHelperExamples

{

    public enum UserColours

    {

        [Description("Burnt Orange")]

        BurntOrange = 1,


        [Description("Bright Pink")]

        BrightPink = 2,


        [Description("Dark Green")]

        DarkGreen = 3,


        [Description("Sky Blue")]

        SkyBlue = 4

    }

}


Description 이라는 attribute 를 설정하고 해당 값에 맞게 하나의 단어 사이에 빈값을 두어서 하나의 정확한 단어가 되도록 설정을 하였습니다. 이제는 Description 에 기재되어 있는 문자열을 추출하는게 문제가 되는데요.


이에 대한 helper 를 하나 만들어 보겠습니다.


using System;

using System.ComponentModel;

using System.Reflection;


namespace Ellington.EnumHelperExamples 

{

    public static class EnumHelper

    {        

        public static string GetDescription(Enum en)

        {

            Type type = en.GetType();


            MemberInfo[] memInfo = type.GetMember(en.ToString());


            if (memInfo != null && memInfo.Length > 0)

            {

                //해당 text 값을 배열로 추출해 옵니다.

                object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);


                if (attrs != null && attrs.Length > 0)

                {

                    return ((DescriptionAttribute)attrs[0]).Description;

                }

            }


            return en.ToString();

        }


    }


}


위의 코드를 보시면, 기본적으로 enumeration 으로 가져옵니다. 그리고 메소드인 "DescriptionAttribute" 로 찾기 위해서 Reflection 을 사용했습니다.  그 다음에 Description 을 반환했고요. 만약에 DescriptionAttribute 으로 ENUM 값이 존재하지 않는다면 ENUM 의 이름을 ToString() 으로 형변환하여 enum 의 이름을 얻게 됩니다.


이제 위의 helper 를 사용하여 ENUM 키워드와 어떻게 조합하여 값을 가져오는지 살펴보죠.


EnumHelper.GetDescription(UserColours.BrightPink);

 



감사합니다. - POSTED BY 심재운 (shimpark@gmail.com)