Enum 이해하기

Ryan Ham·2024년 5월 16일
0

C++

목록 보기
4/26

Enum

Cpp에서 enum은 주로 같은 종류에 속하는 요소들을 묶어 custom type을 만들 때 사용한다. 물론 enum을 사용하지 않고 개별적으로 각 요소들을 정의할 수 있지만, enum을 사용하게 된다면 code readability랑 변수들에 대한 type safety를 강화할 수 있어서 사용한다. Enum의 선언 위치는 main 함수 밖에서 미리 선언해두자. 아래는 cpp에서 enum을 정의 및 사용하는 예시이다.

enum Weather {
	Spring,
    Summer,
    Fall,
    Winter
}; // enum 정의 부분

int main(){

	Weather weather = Spring; //enum 타입 변수 선언

}

Enum과 Enum class

위 코드 예시를 보면서 한 가지 불편한 부분이 있었을 수 있다. 필자는 이 부분을 처음 볼때 상당히 어색했는데 그건 바로 enum 타입 변수 선언 부분에서 바로 Spring을 가져다가 썼기 때문이다. 사실 이렇게 가져다가 쓰면 변수 충돌 가능성이 엄청나게 증가할 텐데 말이다. 그래서 이를 해결하고자 enum을 namespace로 한번 wrapping해서 사용할 수도 있다. 하지만, cpp는 정확히 이 문제를 위해 enum class라는 것을 만들어 두었다. Enum class는 다음과 같이 쓸 수 있다.

enum class Weather{
	Spring,
    Summer,
    Fall,
    Winter
};

int main(){

	Weather weather = Weather::Spring;

}

enum class로 선언된 변수를 사용하고자 할때는 마치 namespace로 변수를 선언하듯이 가져오면 된다.


Enum과 Switch-case문

enum과 찰떡궁합인 구문은 switch-case 문이라고 할 수 있다. 아직까진 switch-case 문을 많이 활용해보지는 못했지만 Unreal 개발에서는 많이 쓰인다고 하니 손에 익혀두자!

먼저 switch-case문에 대해서 간략히 알아보자면 생길 수 있는 case들을 문자나 숫자 형태로 만들고 switch-case문에 들어온 값이 특정 case와 일치하면 그 case안에 있는 코드를 실행하는 구문이다. case들이 정해져 있는만큼 enum이랑 잘 어울리고 보기에 깔끔하다.

#include <iostream>

enum class Color {
    RED,
    GREEN,
    BLUE
};

void printColor(Color color) {
    switch (color) {
        case Color::RED:
            std::cout << "Red" << std::endl;
            break;
        case Color::GREEN:
            std::cout << "Green" << std::endl;
            break;
        case Color::BLUE:
            std::cout << "Blue" << std::endl;
            break;
        default:
            std::cout << "Unknown color" << std::endl;
            break;
    }
}

위는 enum과 switch-case문을 사용해 조건문을 구현한 코드이다. 여기서 정말 중요한 visual studio 꿀팁이 있는데 이 방법은 enum이 선언된 상태에서 switch문을 작성할때 tab키를 통해서 매우 쉽게 switch문을 생성한다. 먼저, switch를 쓰고 tab을 한번 누르면 switch문의 골격이 생성된다. 그 후, 괄호 한에 어떤 enum을 쓸건지 적은 다음 tab키를 한번 더 누르게 되면 해당 enum의 모든 요소에 대해 완성된 switch문을 얻을 수 있다.

profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글