재우니의 블로그

 

이번에는 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)