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