언어 자료구조 알고리즘/디딤돌 C++

10. 신뢰성 강화 (열거형)

언제나휴일 2016. 1. 27. 19:27
반응형
안녕하세요. 언제나 휴일, 언휴예요.
이번에는 C++언어가 C언어보다 신뢰성을 강화한 문법 중에 열거형을 알아보기로 해요.

 

 

C++언어는 C언어보다 자료 형식에 관한 부분에서 신뢰성을 강화하고 있어요.
 
먼저 C언어에서는 열거형 변수에 정수 형식을 대입하거나 초기화를 하는 것이 가능합니다.
//C언어에서의 열거형 사용
//Program.c
#include <stdio.h>
 
enum Gender
{
    FEMALE, MALE
};
 
int main()
{
    enum Gender g = 3;//C언어에서는 열거형 변수에 정수형을 대입 및 초기화 가능
    printf("g is %d\n",g);
 
    return 0;
}
 
▷ 실행 결과
g is 3
 
하지만 C++에서는 열거형 변수에 정수 형식을 대입하거나 초기화할 수 없어요.

다음은 열거형 변수에 정수를 대입하였을 때 컴파일 오류가 발생하는 예제 코드예요.
//신뢰성 강화 - 열거형 변수에 정수 표현 대입 불가
//Program.cpp
#include <iostream>
using namespace std;
 
enum Gender
{
    FEMALE, MALE
};
 
int main()
{
    Gender g = 3;//열거형 변수에 정수형을 대입 초기화 불가
 
    return 0;
}
 
이와 같은 오류를 발생하게 한 이유는 열거형에 나열한 값은 정수 형식의 부분 집합이지만 모든 정수 형식에 있는 값을 사용할 수 없기 때문에 발생하는 것입니다. 특히 열거형에 열거한 값이라도 정수 형식을 대입할 수 없어요. 컴파일러는 변수의 형식으로 오류를 검사하는 것이지 값으로 검사하지 않기 때문이죠.
 
하지만 정수 형식 변수에 열거형을 대입하는 것은 가능해요. 따라서 정수 형식이 올 수 있는 곳에 열거형을 사용하는 것은 아무 문제가 없습니다. 이는 열거형에 나열할 수 있는 값은 정수 형식을 벗어날 수 없기 때문에 신뢰성에 아무 문제가 없기 때문입니다.
//정수 형식이 곳에 열거형 사용
//Program.cpp
#include <iostream>
using namespace std;
 
enum Subject
{
    KOREAN, ENGLISH, MATH, MAX_SUBJECT
};
enum ScoreConst
{
    DEF_SCORE=-1, MIN_SCORE=0, MAX_SCORE=100
};
 
int main()
{
    //정수 형식일 곳에 열거형을 사용하는 예제 코드
    const char *titles[MAX_SUBJECT] = {"국어","영어","수학"};
    int scores[MAX_SUBJECT]={DEF_SCORE,DEF_SCORE,DEF_SCORE};
 
    scores[KOREAN] = 90;
    scores[ENGLISH] = MAX_SCORE;
    scores[MATH] = MIN_SCORE;
 
    for(int si = 0; si<MAX_SUBJECT; si++)
    {
        cout<<titles[si]<<":"<<scores[si]<<endl;
    }
 
    return 0;
}
 
실행 결과
국어:90
영어:100
수학:0

반응형