나 개발자 진짜 되냐?

[ C++ 기본 문법 8 ] 분기문 본문

C++을 시작해봐요!/문법정리를 해보았어요!

[ C++ 기본 문법 8 ] 분기문

Snow Rabbit 2025. 3. 2. 13:01
반응형

 

드디어! 데이터를 마치고

이 데이터를 다루고 만지는 문법들을 배우려고한다

 

사실 c#과 비슷한 내용이 많을 거 같지만

한번 정리하면 도움이 될 것 같아서!


 

분기문에 대해 알아보자

 

사실 분기문을 처음 익혀보는데..

분기문은 조건문과 반복문 사이에서

흐름을 정해주는 친구라고 한다.

 

일정 조건에 따라 다르게 적히는 것을 의미한다.

 

사실 제어문이라는 큰 틀 안에 분기문, 반복문 있는거긴 한데

 

하나씩 공부해보자

 


 

IF

 

만약, 전제조건이랑 맞다면??

이라고 해석할 수 있다.

 

예시를 하나 들어보자

int hp = 100;
int damage = 100;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
cout << " 몬스터 깨꼬닥 " << \n;

 

 

즉,

if문 괄호 안에 있는 () 값이 참일 경우

if문 밑에 있는 식이 무조건적으로 실행된다.

참이 아닐 경우 밑의 식은 고대로 넘어간다.

 

지금 예시로는 bool값을 넣긴 했지만 뭐 식을 넣어도 되고 참만 되면 상관없다.

 

 

int hp = 100;
int damage = 90;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
cout << " 몬스터 깨꼬닥 " << \n;

if(isDead == false)
cout << " 몬스터 안 깨꼬닥 " << \n;

 

만약에 대미지가 살짝 모자라면 어떻게 될까?

hp가 0이 안되기 때문에 

첫 번째 if문은 넘어가고 두 번째 if문만 실행될 것이다.

 

isDead == false 보단 그래도! isDead를 쓰는 편이 더 간단하고 편하긴 하다.

하지만 가독성에서 조금 아쉬운 부분이 있어서, 되도록이면 편해도 다 써 버릇하는 것도 좋다.

 

다 회사에 가서.. 코드컨벤션으로 익힐 것이긴 하지만..

 

 

자, 본론으로 다시 돌아와서..

 

if문이 저렇게 여러 개 있으니 참 복잡해 보인다.

그래서 우리는 더 간단해지고 업그레이드된 if문을 사용하게 된다.

 

그것은 if / else 

int hp = 100;
int damage = 90;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
	cout << " 몬스터 깨꼬닥 " << \n;
else
	cout << " 몬스터 안 깨꼬닥 " << \n;

 

이렇게 해주면 컴퓨터도 좀 더 편..? 해진다.

 

지금은 한 줄이지만, 두줄로 쓰고 싶을 땐?

 

int hp = 100;
int damage = 90;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
{
	cout << " 몬스터 깨꼬닥 " << \n;
    cout << " 다음 몬스터를 사냥해보자! " << \n;
}
else
{
	cout << " 몬스터 안 깨꼬닥 " << \n;
}

 

이렇게 괄호로 나타낸다.

 

if문 내에서 또 조건이 생기면

또 if문안에 if문을 넣고 넣고 넣고 하면 엄청 if문이 많아지는데..

if문이 많다고 좋은 게 저얼대 아니다.

 

 

이렇게 체력 20 이상일 때,도망가도록 하게 만들려면 

 

int hp = 100;
int damage = 90;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
	cout << " 몬스터 깨꼬닥 " << \n;
else
{
	if (hp>20)
		cout << " 몬스터가 날 공격해! " << \n;
	else
		cout << " 몬스터 도망간다ㅏㅏ " << \n;
}

 

 

하지만.. 이렇게 점점 늘어나면 정말 좋은 코드가 아니다.

 

그래서 나온 친구가 if / else if / else이다.

 

이렇게 해주면

 

int hp = 100;
int damage = 90;

hp -= damage;
bool isDead = ( hp <=0 );

if(isDead)
	cout << " 몬스터 깨꼬닥 " << \n;
else if (hp>20)
	cout << " 몬스터가 날 공격해! " << \n;
else
	cout << " 몬스터 도망간다ㅏㅏ " << \n;

 

 

이렇게 사용 가능하다. 아까보다 짧고 굵다.

 

 

또 다른 예시를 가져왔습니다.

 

const int ROCK = 0;
const int SCISSORS = 1;
const int PAPER = 2;

int input = ROCK;

if (input == ROCK)
	cout << "바위를 냈습니다." << \n;
else if (input == SCISSORS)
	cout << "가위를 냈습니다." << \n;
else if (input == PAPER)
	cout << "보를 냈습니다." << \n;
else
	cout << "가위바위보를 할줄 몰라?" << \n;

 

자 꽤나 잘 만들었다고 생각하겠지만.. 참 아쉬운 게 있다.

그것은 바로 비슷한 부분을.. 너무 반복하는 것

그런 부분에 특화되어있는 친구가 있다.

 

그 친구는

 

SWITCH

 

이 닌텐도 스위치 같은 녀석은 상황에 따라 그에 맞춰 작동된다.

 

switch( 평가할 대상 )

{

case 1:

break;

case 2;

break;

}

 

형태는 이렇게 생겼다.

 

 

switch(input)
{
case ROCK:
    cout << "바위를 냈습니다." << \n;
    break;
case SCISSOR:
    cout << "가위를 냈습니다." << \n;
    break;
case PAPER:
    cout << "보를 냈습니다." << \n;
    break;
}

 

엇! break;가 뭔가요?

 

이 스위치라는 친구, 들어오는 건 쉽지만 나가는 건 마음대로 못나간다.

그래서 나갈 수 있게 문고리를 만들어줘야한다.

 

그것이 break;

 

이 break가 있으면

 그 기점으로 이 스위치를 완전히 빠져나간다.

즉 input이 바위였다면 밑에 가위랑 보는 쳐다도 안보고 나가게 된다.

 

그래서 break를 쓰지않는다면 그밑에도 다 돌아서

3줄이 다 나오게 된다.

 

아까 if문에는 아닌걸로 else가 있는데 switch엔 없나?

아니요 있습니다. default라고 해서 사용하며 옵션이다. 꼭 필수로 쓸 필요는 없다.

 

switch(input)
{
case ROCK:
    cout << "바위를 냈습니다." << \n;
    break;
case SCISSOR:
    cout << "가위를 냈습니다." << \n;
    break;
case PAPER:
    cout << "보를 냈습니다." << \n;
    break;
default:
    cout << "가위바위보를 할줄 몰라?" << \n;
    break;
}

 

 

이렇게 사용 할 수 있다.

 

break 말고 또다른 친구가 있다 continue

이름과 비슷하게 이 친구는 계속 이어서 할거에요! 라는 뜻을 가지고 있다.

 

그래서 continue를 쓰면 그 밑으로 자연스럽게 내려가게 된다.

흠 그러면 안쓰는거랑 같은 뜻 아닌가? 싶다.

 

마지막으로 switch문은 한정적으로 사용할 수 있다.

안에 괄호에는 꼭 정수만 넣을 수 있다.

float를 넣으면 빨간줄이 뜨는걸 볼 수 있다.

 

 

반응형