안녕하세요? 고슴도치입니다.
간만에 글 쓰네요..ㅋㅋ

C++은 타입을 값으로 쓸 수가 없기 때문에 타입을 이용한 로직 처리가 힘들었지요.. 이와 다르게 C#은 타입도 데이터로 처리가 가능해서 이를 이용해서 편리하게 코딩이 가능합니다.. 그 중 한가지를 소개할까 하는데요.. 우선 아래의 코드를 봅시다..

[code]
enum Cent
{
        Penny = 1, Nickel = 5, Dime = 10, Quarter = 25, Dollar = 100
};
[/code]

아래와 같은 출력값도 한 번 살펴봅시다.

[code]
Peny          = 1
Nickel        = 5
Dime          = 10
Quarter       = 25
Dollar        = 100
[/code]

위 코드는 C++에서도 C#에서도 잘 작동합니다. (단, C#에서는 마지막에 있는 세미콜론이 없어야겠죠.)
C++에서 위와 같은 결과값을 출력하려면 어떤 방법이 가장 쉬울까요?
간단히 생각하면 '하드코딩'만 떠오릅니다..=_ =;

저의 경우에는 C++에서 위처럼 출력하고 싶을 때에는 enum을 감싼 클래스를 대충 하나 만들곤 합니다.
(예외처리도 무시하고 몇 가지 기능이 생략된 코드입니다.)

[code]
class Cent
{
public:
        enum _type
        {
                Penny = 1, Nickel = 5, Dime = 10, Quarter = 25, Dollar = 100
        };

private:
        _type value_;

public:
        Cent() : value_(Penny) {}
        Cent(const Cent& _2) : value_(_2.value_) {}
        Cent(const Cent::_type& _2) : value_(_2) {}
        Cent(int _2) { value_ = (_type)_2; }

        int ToInt() const
        {
                return (int)value_;
        }
        std::string ToString() const
        {
                switch (value_)
                {
                case Penny: return "Penny";
                case Nickel: return "Nickel";
                case Dime: return "Dime";
                case Quarter: return "Quarter";
                case Dollar: return "Dollar";
                default: return "";
                }
        }

        static Cent GetCent(int index) const
        {
                switch (index)
                {
                case 0: return Penny;
                case 1: return Nickel;
                case 2: return Dime;
                case 3: return Quarter;
                case 4: return Dollar;
                }

                return Penny;
        }

        static int GetSize() const
        {
                return 5;
        }
};
[/code]

위처럼 만들고..

[code]
void main()
{
        for (int i = 0; i < Cent::GetSize(); i++)
        {
                Cent cent = Cent::GetCent(i);
                cout << cent.ToString() << "\t= " << cent.ToInt() << endl;
        }
}
[/code]

이런식으로 출력하지요..
C++에서는 열거형을 출력하기 위해서 하드코딩된 '무언가'를 만들지 않으면 안됩니다.. 위의 예제에서만 봐도 열거형에 새로운 데이터를 하나 추가하면 Cent::ToString(), Cent::GetCent(), Cent::GetSize()도 수정해줘야 하는 수고를 해야만 하지요.. '하드코딩'이니까요..

-----------------------------------------------

그럼 C#에서는 이를 어떻게 하는지 한번 봅시다..

C#에는 Enum이라는 클래스가 있습니다. 이 클래스의 역할은 enum 타입을 받아서 값을 열거하거나 값의 이름을 열거해주는 역할을 합니다. 즉, 위 C++ 코드에서 제가 하드코딩으로 만든 클래스의 역할을 해주는 것이지요..
바로 C# 코드를 봅시다.

[code]
namespace CentExample
{
        class CentExample
        {
                enum Cent
                {
                        Penny = 1, Nickel = 5, Dime = 10, Quarter = 25, Dollar = 100
                }

                static void Main(object[] args)
                {
                        // Cent의 값목록을 배열로 받아옵니다.
                        Cent[] centValues = Enum.GetValues(typeof(Cent));

                        // 목록을 루프로 돌면서 하나씩 출력합니다.
                        foreach (Cent cent in centValues)
                        {
                                Console.WriteLine("{0}\t= {1}", cent.ToString(), (int)cent);
                        }
                }
        }
}
[/code]

아주 간단해지죠?
앞으로 C#에서 열거형을 쓸때에는 Enum 클래스를 적극 활용하시길 바랍니다..^ㅡ^