C++ 기본 문법 알아보기

6장. 조건문이란?

보리보리밥밥 2019. 1. 9. 11:58

이번 글에서는 조건문에 대해서 배워보자.


조건문에는 크게 if문, switch case문 두가지가 있는데, 이 두 조건문으로 프로그램의 흐름을 조절할 수 있다.



if문


먼저 if문에 대해서 배워보자.


if문을 사용해서 미성년자인지 성인인지 구별하는 프로그램이다.


#include <iostream>

using namespace std;


int main()

{

int age;


age = 20;


if (age <= 19)

{

cout << "미성년자입니다.\n";

}

else

{

cout << "성인입니다.\n";

}


return 0;

}



age의 값이 20이기 때문에 age <= 19는 false가 되기 때문에 "성인입니다"가 항상 출력된다.


그리고 if문에는 else문이 필수는 아니기 때문에 없어도 상관은 없다.


다음으로는 else if문을 알아보자.


else if문은 if문 다음에 조건을 또 걸고 싶을 때 사용한다.


예제를 보고 이해해보자.


#include <iostream>

using namespace std;


int main()

{

int age;


age = 19;


if (age <= 18)

cout << "미성년자입니다\n";

else if (age == 19)

cout << "조금만 있으면 성인입니다.\n";

else

cout << "성인입니다.\n";


return 0;

}



만약 조건문 코드가 한 줄 이라면 이렇게 괄호를 생략해서 사용할 수 있다.


한 if문에서 if와 else는 한 번씩 밖에 못 쓰지만 else if는 얼마든지 사용할 수 있다.


else if를 분해해서 보면 다음과 같다.


if ( age >= 20 )

cout << "성인입니다.\n";

else if ( female == true )

cout << " 성인이 아니면서 여성입니다.\n";


if ( age >= 20 )

cout << "성인입니다.\n";

else

{

if ( female == true )

cout << " 성인이 아니면서 여성입니다.\n";

}


두 if문은 동일한 동작을 하고 있다.


이제 전에 배웠던 논리 연산자를 통해 표현해보자.


if ( age >= 20 )

cout << "성인입니다.\n";


if ( !(age >= 20) && female == true)

cout << "성인이 아니면서 여성입니다.\n";


세 if문 모두 동일한 동작은 한다.



switch / case


if문은 bool 타입의 입력을 받아서 true, false에 따라서 다른 코드를 실행해준다.


switch / case문은 정수 타입의 입력을 받아서 그 값에 따라 다른 코드를 실행해준다.


3점 만점의 시험에서 점수에 따라 다른 문장을 출력해주는 프로그램의 예제이다.


#include <iostream>

using namespace std;


int main()

{

int score = 2;


switch(score)

{

case 0:

cout << "망했어요.\n";

break;

case 1:

cout << "반도 못넘었어요.\n";

break;

case 2:

cout << "좀 잘했네요.\n";

break;

case 3:

cout << "훌륭합니다.\n";

break;

}

return 0;

}



2점에 맞는 문장이 잘 출력된 것을 볼 수 있다.


여기서 switch / case의 입력은 변수여야 하고 case 뒤에 오는 값은 무조건 상수여야 한다는 점을 기억하자.



break


그런데 여기서 case가 끝날 때마다 break; 라는 문장이 있다.


break는 조건문이나 반복문에서 탈출할 때 쓰는 예약어이다.


만약 break;를 쓰지 않으면 어떻게 될까?


실험해보자.


#include <iostream>

using namespace std;


int main()

{

int score = 2;


switch(score)

{

case 0:

cout << "망했어요.\n";

case 1:

cout << "반도 못넘었어요.\n";

case 2:

cout << "좀 잘했네요.\n";

case 3:

cout << "훌륭합니다.\n";

}

return 0;

}



case 2를 실행한 뒤 멈추지 않고 끝까지 실행한 것을 볼 수 있다.


break문을 만나기 전까지, break가 없다면 switch / case 문 끝까지 실행한다.



default


그런데 만약 score에 0,1,2,3 이외의 값이 들어오면 어떻게 될까?


이렇게 case에 없는 값을 처리해주기 위해 default가 존재한다.


잘못된 입력 값이 들어왔을 때의 예제를 보자.


#include <iostream>

using namespace std;


int main()

{

int score = 4;


switch(score)

{

case 0:

cout << "망했어요.\n";

break;

case 1:

cout << "반도 못넘었어요.\n";

break;

case 2:

cout << "좀 잘했네요.\n";

break;

case 3:

cout << "훌륭합니다.\n";

break;

default:

cout << "점수가 이상합니다.\n";

}

return 0;

}



여기서 만약 default 밑에 case가 더 있다면 break를 넣어주어야 하겠지만 일반적으로 default가 맨 밑에 위치하기 때문에 넣지 않았다.


이제 case를 붙여서 사용해보자.


score가 만점일 때만 다른 문장을 출력하는 예제이다.


#include <iostream>

using namespace std;


int main()

{

int score = 1;


switch(score)

{

case 0:

case 1:

case 2:

cout << "좀 더 노력하세요.\n";

break;

case 3:

cout << "훌륭합니다.\n";

break;

default:

cout << "점수가 이상합니다.\n";

}

return 0;

}



0, 1, 2 모두 같은 결과가 나온다는 것을 알 수 있다.



if? switch / case?


앞의 예제를 보면 알겠지만 모든 switch / case문은 if문으로 변형이 가능하다.


그렇다면 어떨 때에 어떤 조건문을 사용해야 할까?


switch / case문은 한 변수가 있을 때 이 변수의 값에 따라서 서로 다른 일을 할 때 사용한다.


그 외의 경우는 if문을 사용하면 된다.



삼항 연산자


if문을 사용한 간단한 예제가 있다.


if (a > b)

c = a;

else 

c = b;


이 코드를 삼항 연산자를 사용하면 한 줄로 표현이 가능하다!


c = a > b ? a : b;


? 앞에 조건이 오고 : 앞에 참일 때 실행할 코드, 뒤에는 거짓일 때 실행될 코드가 온다.


훨씬 코드가 짧아지니 필요한 상황에 사용해보자!



goto


프로그램을 만들다 보면 이 코드의 위치로 뛰어넘어야 할 필요를 느낄 때가 있다.


그럴 때 사용하는 명령어가 goto이다.


긴말이 필요없다. 바로 예제를 보자.


#include <iostream>

using namespace std;


int main()

{

goto Cppzoa;


cout << "C++ 시러\n";


Cppzoa:

cout << "C++ 조아!\n";


return 0;

}



잘 건너 뛴 것을 볼 수 있다.


하지만 goto문을 남용하게 되면 소스 코드를 읽기 힘들어지고, 관리하기도 힘들어진다.


goto를 적절히 사용해서 코드가 간결해지고 이해하기 쉬워지면 상관이 없지만 너무 많이 쓰진 말자.


다음 글에서는 반복문에 대해서 배워보자.