' [C/C++] 7.1강 - 상수, C언어에서 상수 사용하기 (2) (enum, 열거형)

Programming/C & C++

[C/C++] 7.1강 - 상수, C언어에서 상수 사용하기 (2) (enum, 열거형)

mdisprgm 2021. 6. 25. 21:03
728x90

(1) 열거형이 필요한 이유

프로그래밍 언어의 문법이나 기능을 잘 활용하려면

 

해당 기능이 왜 생겨났고 언제 사용해야하는지 이해하는 것이 중요하다.

 

enum도 마찬가지이므로 먼저 enum 없이 작성한 코드로 불편함(?)이 뭔지 보자.

 

코드 내부적으로는 각각을 식별할 수만 있다면 문제가 없는 요소들을

 

효율을 위해 문자열보단 정수로 저장하는 경우가 많은데

 

예를 들면 통신 관련 프로그램에서 패킷의 종류를 구분하는 경우 등이 있다.

 

 

아래 코드는 그러한 것들 중 색을 위한 변수들을 만든 것입니다.

#include <stdio.h>

const int RED = 0;
const int ORANGE = 1;
const int YELLOW = 2;
const int GREEN = 3;
const int BLUE = 4;
const int PURPLE = 5;
const int BLACK = 6;
const int WHITE = 7;

int main() {
	int MyColor = YELLOW;

	printf("My Color : %d\n", MyColor);
}

이렇게 색들마다 다 다른 값들을 할당해주고 그 변수들을 사용하는 것이다.

 

const로 선언했으니 안심하고 값을 서로 구분하는 용도로 사용할 수 있다.

 

 

그러나 이것은 불편한 점이 몇 가지 있는데

 

1. 자료형을 매번 적어줘야 함.

2. 값을 일일이 할당해줘야 함.

 

이를 해결하기 위한 것이 바로 enum이다.

 

 

(2) 열거형 사용하기

enum을 우리말로 열거형이라고 한다.

 

사용방법도 아래처럼 기호들을 '열거'하는 것이다.

 

enum (열거형 이름) {

값1,값2,값3

...

};'

 

','로 값들을 구분하며 마지막에는 붙이지 않고,

 

또 enum을 선언한 후 중괄호 뒤에는 ';'를 붙여줘야 한다.

 

가독성을 위해 한 줄에 값 하나만 적기도 한다.

 

#include <stdio.h>

enum Color {
	RED,//콤마로 구분하는데
	ORANGE,
	YELLOW,
	GREEN,
	BLUE,
	PURPLE,
	BLACK,
	WHITE//마지막은 쓰지 않고
};//세미콜론으로 끝낸다

int main() {
	enum Color MyColor = YELLOW;
    //C에서는 enum 키워드를 반드시 붙여야 한다

	printf("My Color is  %d\n", MyColor);//2가 출력된다.
}

이렇게 하면 맨 처음에 있는 RED부터 마지막 WHITE까지 0부터 차례대로 자동으로 값을 할당해주게 된다.

 

YELLOW는 Color에 선언된 열거형 값이므로

 

자료형이 Color여야 하는데, 이때 C언어에서는 enum을 꼭 붙여줘야 한다.

 

 

enum 값 자체는 4Bytes 정수형이므로 %d로 출력해주면 된다.

%d로 출력이 된다는 것은, int에도 저장이 된다는 뜻이다.

int ColorN = GREEN;//작동이 잘 된다.

 

 

C++에서는 enum 키워드 생략이 가능하기 때문에 cpp 확장자를 사용한다면 생략해도 컴파일이 될 것이다.

 

하지만 여기선 C를 공부하는 것이기에 enum 키워드를 표기했다.

 

 

아 물론 값을 임의로 지정해줄 수도 있다.

enum Color  {
	RED = 1,
	ORANGE,
	YELLOW,
	GREEN,
	BLUE,
	PURPLE = 10,
	BLACK,
	WHITE
};

이렇게 하면 지정된 값은 그대로 할당되고

 

다음 값들은 (이전 값) + 1; 이 된다.

 

즉, 위 enum의 값들을 차례대로 출력하면 아래와 같다.

 

위에서 출력한 결과와 비교하면

 

이번에는 1로 시작해서 차례대로 증가하다가

 

중간에 10을 만나 다시 10에서 증가하기 시작하는 걸 볼 수 있다.

 

 

이렇게 enum요소에 값을 명시하여 대입하는 일은

 

불규칙적인 값을 할당해야 할 때에 직접 지정해주기도 하지만

 

여러 협업이 필요하거나 제3자도 코드를 사용하는

 

오픈소스 프로젝트 같은 곳에서 가독성을 위해 연속적인 값임에도 일일이 지정해주기도 하는 경우가 있다.

 

그때는 enum을 굳이 써야 하나..? 싶기도 하겠지만 enum을 쓰는 이유는 자동으로 값을 할당해주는 편리함 때문만이 아니라

 

'이 값들은 같은 류의 값들이다'라는 것을 알려주기도 한다.

 

한마디로, 코드를 쉽게 이해하기 위함이라고 할 수 있는 것..

 

 

끝.

728x90

'