열거형
: 상수에 이름을 부여해주는 기능. 여러 상수를 그룹으로 묶어준다.
: 사용자 정의 변수 타입으로도 사용 가능.
: 구현 방법으로는 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 |
---|