Enumeration Type
 이뉴머레이션 타입. 우리나라 말로 열거형이다. C++로 작업할 때 많이 사용했었는데 다음과 같은 장점이 있다.
의미 있는 값 표시
#define을 이용하면 정의된 값으로 치환되기 때문에 디버깅할 때 힘들다.
 이 때 enum을 이용하면, 정수로 변환되어 사용되긴 하지만 enum에서 정의한 단어 즉, 의미있는 단어가 그대로 나오기 때문에 직관적으로 알 수 있다.
형태에 안전한 코드
 형태에 안전하도록 제약조건을 둘 수 있다. 어떤 함수(내지는 메소드)를 
someFunc(int valueType)와 같이 정의했는데 인수로 들어가는 값이
 0: Unknown, 1: String, 2: Number, 3: DateTime 이라고 해 보자. 인수를 정수형태로 받기 때문에 0 ~ 3 이외의 값을 입력받을 수 있다. 5가 입력되면 어떻게 처리한단 말인가...
 자~ 다음과 같이 enum 타입을 정의하고
enum ValueType
{
      eUnknown = 0
    , eString = 1
    , eNnumber = 2
    , eDateTime = 3
    ;
}
someFunc(ValueType valueType) 으로 정의하면 받을 수 있는 인수값이 enum에 정의한 값으로 제한된다. 즉, 형태와 값에 안전한 코드를 생성할 수 있다.
enum in Java
 지금까지는 C++ 얘기였고, Java 얘기를 해보자.
JDK 1.5부터 enum 형태를 지원하기 시작했단다. Java의 enum도 C++에서와 마찬가지 효과를 얻을 수 있으며, 정의는 다음과 같이 한다.
public enum ValueType
{
      Unknown
    , String
    , Number
    , DateTime
};
 C++와 비슷하다... 여기서 끝나면 뭔가 허전하다. 뭔가 조금이라도 좋아진 것이 있을텐데... 그렇다. Java의 enum은  값을 정수 이외의 다른 형태의 값도 가질 수 있다. 즉, 다음과 같이 정의할 수 있다.
public enum ValueType
{
      Unknown("unknown")
    , Text("string")
    , Integer("integer")
    , Real("real")
    , DateTime("datetime")
    ;
 
    private String _description; 
    private ValueType(String description)
    {
        this._description = description;
    }
 
    public String getDescription()
    {
        return this._description;
    }
}
ValueType.Text.getDescription()와 같이 하면 지정된 enum 값에 할당된 값을 얻을 수 있다.
값을 가져올 수 있으면 값에서 enum 정의를 가져 올 수도 있을 것이다.
public enum ValueType
{
      Unknown("unknown")
    , Text("string")
    , Integer("integer")
    , Real("real")
    , DateTime("datetime")
    ;
 
    private String _description; 
    private ValueType(String description)
    {
        this._description = description;
    }
 
    public String getDescription()
    {
        return this._description;
    }
    public static ValueType getTypeFromString(String description)
    {
        for(ValueType valueType : ValueType.values())
        {
            if( description.equalsIgnoreCase(valueType._description) )
                return valueType;
        }
        return Unknown;
    }
}
 위와 같이 정의된 
getTypeFromString()을 이용하면,
 설정파일에서 값을 읽어 바로 enum으로 변환하여 사용할 수 있다.

