본문 바로가기
개발 언어/cpp

CPP Enum(enumerate)

by eeeun:) 2022. 1. 19.
반응형

Enum이란?

열거형, enumerate에서 나온 키워드다.

enum를 통해 자기만의 자료형을 만들 수 있다 = 사용자 정의 자료형

아래와 같이 enum은 열거자를 가지는데, 열거자는 ;이 아니라 ,로 구분된다.

enum DayWeak {
	MON, TUE, WEN, THU, FRI, SAT, SUN
};

enum을 정의 시에는 메모리가 할당되지 않고, 열거된 유형의 변수가 정의된 경우에 변수에 대해 메모리가 할당된다.

열거자 대체로 모두 대문자로 이름을 짓는다.

 

열거자는 enum와 같은 네임스페이스에 배치되므로, 열거자 이름은 같은 네임스페이스 내의 여러 enum에서 사용할 수 없다.

밑의 예제를 보자.

enum dayWeak {
	MON
};

enum classDay {
	MON <- error!
};

이미 dayWeak에서 MON를 열거자로 썼기 때문에 classDay에서 MON를 다시 선언할 수 없다.

 

각 열거자는 enum의 위치에 따라 정수 값이 자동으로 할당된다.

기본적으로 첫 번째 열거자에는 정수 값 0이 할당되며, 각 이후 열거자에는 이전 열거자 + 1이 할당된다.

그렇다면 enum를 왜 쓸까?

 

enum를 쓰는 이유!

가독성과 효율성이 좋음!

개발 시에 관리를 위해 값을 코드화해서 많이 사용하는데, 값을 새로 추가하기도 힘들고 문서로 정리해야 되는 단점이 있다.

enum은 정수 값을 자동으로 할당하기 때문에 위에 문제가 해결됨!

 

또한 열거자를 바로 쓸 수 있으므로 코드 이해가 쉽다.

밑에 예제를 보자.

// enum를 쓰지 않을 시
if (day == 1) <- 1의 값이 무엇인지 알 수 없음


// enum 사용 시
enum DayWeak {
	MON, TUE, WEN, THU, FRI, SAT, SUN
};

if (day == DayWeak::MON) <- 직관적으로 이해하기 쉬움

원래는 1, 2와 같이 정수로 값을 판단할 때는 1이 무엇인지 알기 힘들다.

또한 자칫해서 정해놓은 값을 착각한 경우(MON이 1인데 2로 착각한 경우) 프로그램 자체에 문제가 생길 수 있다.

안정성이 매우 떨어짐!

 

enum은 DayWeak::MON처럼 열거자를 바로 쓰기에 프로그램 안정성이 ⬆️

 

 

enum의 typedef

아래와 같이 enum를 typedef로 정의하면 더욱 효율적으로 쓸 수 있다

struct enum DayWeak {
	MON, TUE, WEN, THU, FRI, SAT, SUN
};

// 자료형처럼 사용가능
// 단, 열거자만 대입 가능 아닐 경우 컴파일 에러
DayWeak dayWeak1 = SUN;
DayWeak dayWeak2 = FRI;
728x90

댓글