프로그래밍/C C++

enum 열거형

우진샘 2013. 3. 22. 18:03

enum 열거형

* 일반적인 사용법

enum COUNTRY
{
    COUNTRY_FIRST,
    COUNTRY_KOREA = COUNTRY_START,
    COUNTRY_AMERICA,
    COUNTRY_INDIA,
    COUNTRY_GERMANY,
    COUNTRY_LAST
}

int main(void)
{
    COUNTRY country;
    country = COUNTRY_KOREA,
    for(int i=COUNTRY_FIRST; i<COUNTRY_LAST, i++)
    {
        ......
    }
    return 0;
}

가급적 처음과 끝을 지정할 수 있는 값을 넣어주는 것이 좋음.


하지만 아래와 같은 경우 이름이 겹치는 문제가 발생할 수 있다.
    enum VERTICAL     { TOP, CENTER, BOTTOM};
    enum HORIZONTAL { LEFT, CENTER, RIGHT};
프로젝트가 클 경우에는 이런 경우가 자주 발생을 하며 항상 이름을 바꾸려면 번거로울 뿐만 아니라 원치 않는 엉뚱한 값이 들어갈 가능성도 크다.
따라서 아래와 같은 방법으로 사용해보자.


* namespace와 결합하는 방법

namespace VERTICAL
{
    enum ALIGN { TOP, CENTER, BOTTOM};
}

namespace HORIZONTAL
{
    enum ALIGN { LEFT, CENTER, RIGHT};
}

int main(void)
{
    VERTICAL::ALIGN vAlign;
    HORIZONTAL::ALIGN hAlign;

    vAlign = VERTICAL::CENTER;
    hAlign = HORIZONTAL::CENTER;


위와 같은 방법으로 사용하면 의미도 좀더 명확해지고 이름을 지을 때 중복될 것을 걱정하지 않아도 된다.
비슷한 다른 방법으로는 Class를 사용하는 방법도 있다.

* Class를 사용하는 방법

class VERTICAL
{
    public:
    enum ALIGN { TOP, CENTER, BOTTOM};
}

class HORIZONTAL
{
    public:
    enum ALIGN { LEFT, CENTER, RIGHT};
}

int main(void)
{
    VERTICAL::ALIGN vAlign;
    HORIZONTAL::ALIGN hAlign;

    vAlign = VERTICAL::CENTER;
    hAlign = HORIZONTAL::CENTER;



하지만 enum을 사용할 경우 아래와 같이 여러 가지 문제가 있으니 주의하여 사용하도록 하자.
 - int로의 암묵적인 변환
 - 바탕 형식을 명시하지 못함
 - 이상한 범위 적용
참고 : http://occamsrazr.net/tt/184

'프로그래밍 > C C++' 카테고리의 다른 글

메모리 영역  (0) 2013.04.20
크리티컬 섹션(Critical Section)  (0) 2013.03.21
% 서식문자 정리  (0) 2013.03.01
프로그래밍/바이트 오더(byte order)  (0) 2011.03.15
프로그래밍/assert  (0) 2010.03.05