공부/SeSac 캠프 언리얼 과정

04.25 C++ 기초 : 분기문과 열거형

minsun24 2025. 4. 25. 14:02

 열거형 

  : 상수에 이름을 부여해주는 기능. 여러 상수를 그룹으로 묶어준다.

  : 사용자 정의 변수 타입으로도 사용 가능.

  : 구현 방법으로는 const / #define / enum을 사용할 수 있다.


 enum 

 default 값

      : Type은 생략 시 int 타입이 된다.

      : 값은 생략 시 첫 번째 값이 0으로 지정, 이후 값은 이전 값 +1이 된다.

 

 

 일반형 enum 

       : 소속 enum 이름 없이 바로 사용이 가능하기 때문에 일반 변수와 혼용될 수 있다. -> namespace 활용으로 보완.

       :  열거형의 이름 첫 자리는 E를 붙이는 관습이 있다.

/* enum 열거형 이름 : Type { 상수 = 값, 상수 = 값...}; */
enum ESRP : char  
{
	Scissor = 1,     // 1
	Rock,		 // 2
	Paper		 // 3
};

//일반 변수와의 혼용을 방지하기 위해 namespcae를 사용하기도 한다.
namespace Name
{
	enum ESRP
    {
    	Scissor,
        Rock,
        Paper
    }
}

printf("%d\n", Scissor);	// 1
printf("%d\n", Name::Scissor);  // 0

 

 

 enum class 열거형 이름 : Type { 상수 = 값, 상수... }; 

       : 상수 이름 앞에 소속 class 명을 적어야 한다. ex) ESRP::Scissor

       : 해당 클래스 타입의 변수를 사용하기 때문에 int 등의 기본 자료형으로 변환/비교/연산되지 않는다.

/* enum class 열거형 이름 : Type { 상수 = 값, 상수 = 값...}; */

enum class ESRP : char  
{
	Scissor = 1, 	  // 1
	Rock,		 // 2
	Paper		 // 3
};

//enum과 enum class 비교
int main(void)
{
	// 일반 Enum
	printf("%d\n", Scissor); // 특정 enum의 상수임을 명시X
	int SPRNumber = Scissor; //int형 변수에 바로 대입 가능.

	// Enum Class
	printf("%d\n", ESFPC::Scissor); //특정 enum의 상수임을 명시O
	int SFPCNumber = ESFPC::Scissor; // ! error ! int형 변수에 대입/비교/연산 불가
}

 분기문 

  : 여러 조건 중 하나를 선택해서 동작시키는 방식.

 

 If문 

  : 조건식이 true일 경우 코드가 동작되며, false일 경우 else에 작성된 코드가 수행된다.

#include <iostream>

void main()
{
	int BossHP = 57;

	if (BossHP >= 70)
		printf("보스 체력이 70 이상입니다.\n");
	else if (BossHP >= 50)
		printf("보스 체력이 50 ~ 69 사이입니다.\n");
	else
		printf("보스 체력이 50보다 적습니다.\n");
}

  >> if : 조건식이 true를 반환할 경우 다음 코드 블록을 수행한다.

  >> else if : 이전 조건식이 false이며 현재 조건식이 true일 경우 다음 코드 블록을 수행한다.

  >> else : 이전 조건식이 모두 false일 경우 다음 코드 블록을 수행한다.


 Switch 

  : 특정 값을 찾는 분기 형태.

  : switch의 인자 값과 각 case의 상수 값을 비교하여 해당되는 case부터 수행된다.

  : 상수와 비교하는 특성 때문에 주로 enum과 함께 사용된다.

  : 모든 case에 해당되지 않는다면 default가 수행된다.

#include <iostream>
#include <time.h>

enum ESRP
{
	Scissor = 1,
	Rock,
	Paper
};

void main()
{
	srand(time(0));
	rand();

	// AI가 가위(1), 바위(2), 보(3) 중 하나를 선택.
	int AI = rand() % 3 + 1; //(0-2) + 1

	switch (AI)
	{
		case Scissor:
			printf("AI : 가위\n");
			break;
		case Rock:
			printf("AI : 바위\n");
			break;
		case Paper:
			printf("AI : 보\n");
			break;
		default:
			printf("!error!");
	}
}

 

 

  case에서의 변수 생성 및 활용

       : case 내에서는 변수 선언과 동시에 초기화 할 수 없다. -> 블록을 선언해서 넣거나, 선언 후 값을 대입하는 형태는 허용.

       : 각 case가 블록으로 구분되어 있지 않기 때문에 중복 선언은 불가능하다.

#include <iostream>

void main()
{
	int n = 0;

	switch (n){  //AI의 타입 int, ESRP의 타입도 default(int)이므로 비교 가능.
	case 1:
		//int NumberC = 100; -> !error! 선언과 동시에 초기화 불가.
		int NumberC;
		NumberC = 100; // -> 가능!
		break;
	case 2: {
		int NumberC1 = 100; // -> 블록으로 구분 시 선언과 동시에 초기화 가능.
	}
		break;
	case 3:
		// int NumberC; -> !error! : case1과 중복 정의 
		break;
	}
}

'공부 > SeSac 캠프 언리얼 과정' 카테고리의 다른 글

04.24 C++ 기초 : 변수와 연산자  (0) 2025.04.24