심재운 블로그



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


이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

  1. 퇴근5분전
    포비님이 훈스에 올려서 와봤더니 심재운님이시군요.
    잘보고 갑니다. 이걸 몰라서 Enum을 한글로 해서 사용중입니다. ㅋㅋ ^^;;
    수고하세요.
    2009.10.28 22:25
    • :) 도움이 되셨다니..다행이네요..^^
      2009.10.29 21:52 신고
  2. 저번에 한번 봐서 써먹을려 했는데 구글링에서 잘 안나와서
    이걸 여태 찾았어요ㅠㅠ
    감사합니당
    2011.02.25 09:25
    • 다행이네요.. 저도 많이 써봤는데 성능이슈는 별로 없었고, 편했습니다.ㅎㅎ
      2013.09.25 02:14 신고
  3. 한글 쓰려고 했었는데 이런 좋은 방법이 있었군요
    좋은 정보감사합니다
    2011.11.17 12:32 신고
    • 별말씀을... ㅎㅎ 좋은 내용이라고 하니 다행이네요.
      2013.09.25 02:14 신고