3. 복합 데이터형(6) - 열거체

WanJu Kim·2022년 10월 17일
0

C++

목록 보기
12/81

구조체랑 비슷하면서도 const를 사용한 것 같이 상수를 만들어주는 기능이 있는데, 그게 바로 열거체다. 열거체는 다음과 같이 사용한다.

	enum spectrum {red, orange, yellow, green, blue, navy, violet};

여기서 enum이 자료형, spectrum이 변수 이름이고, 다른 말로 '열거체'라고 부른다. 중괄호 안의 기호들은 '열거자'라고 부른다. 기본적으로 이렇게 선언하면, red는 0, 오른쪽으로 갈수록 순차적으로 1,2,3...이렇게 늘어난다. 하지만 다른 방식으로 선언할 수 있다.

	enum spectrum {red = 100, orange, yellow, green, blue, navy, violet};

이렇게 하면 red가 100인 상태로 orange는 101, yellow는 102 이렇게 되는 것이다.

	enum spectrum {red = 100, orange = 104, yellow = 2000, green, blue, navy, violet};

이렇게 하면 yellow 이후에만 순차적으로 1씩 늘어난다.
요컨대 마지막으로 정해진 상수 오른쪽으로는 1씩 늘어난다고 보면 된다.
그럼 여기에서 yellow는 몇일까?

	enum spectrum {red = 100, orange = 104, yellow, green = 50, blue, navy, violet};

yellow는 105, blue부터는 다시 51이다. 하지만 가독성을 위해 오름차순으로 적는 게 좋을 것이다.

열거체도 구조체와 마찬가지로 변수를 생성할 수 있다.

	spectrum band

열거체 변수는 특이하게 열거자만 대입할 수 있다.

	band = blue;	// 가능.
    band = 2;		// 불가능.

열거체 변수로 산술 연산을 할 수 없다.

	band = orange + blue;	// 불가능.

열거자들은 정수형이고 int형으로 변환될 수 있다. 하지만 int형이 자동으로 열거자로 변환되지는 않는다.

	int color = blue;	// 맞다. 열거자가 int형으로 변환됐다.
    band = 3;			// int형이 열거자로 변환되지는 않는다.
    color = 3 + red;	// 맞다. red가 int형으로 변환됐다.

적당한 데이터형 변환도 가능하다. 하지만 부적당한 값은 되지 않는다.

	band = spectrum(3);		// 3을 spectrum 데이터형으로 변환.
    band = spectrum(1002);	// 범위를 벗어나서 안된다.

열거체는 상수들을 정의하는 용도이기 때문에 규칙이 매우 제한적이다. 변수 이름을 작성하지 않고 선언 할 수도 있다.

	enum {red, orange, yellow, green, blue, navy, violet}

데이터형 변환할 때 적당한 값을 넣으면 가능하다고 했다. 여기서 가능하다는 건 값이 열거체의 범위 내에 있다는 것을 말한다. 열거체 값의 범위는 어떻게 구할까? 구하는 공식이 있다.

	enum spectrum {red = 100, orange = 104, yellow, green = 50, blue, navy, violet};

여기서 열거자의 최대값은 yellow == 105이다. 이 최대값보다 큰 최소의 2의 거듭제곱 수를 구한다. 2의 거듭제곱 수는 2,4,8...64,128 이므로 128이다. 여기서 1을 뺀다. 그러면 상한은 127이 되는 것이다. 그러면 하한은 어떻게 될까? 만약 최소값이 0이상이면 하한도 0이 된다. 만약 음수라면 상한을 구할때와 비슷하게 구한다. 즉 -52가 최소값이라면, 52보다 최소로 큰 2의 거듭제곱 수는 64다. 64에서 1을 빼면 63이다. 여기에 -부호를 붙여서 -63이 된다.

profile
Question, Think, Select

0개의 댓글