조건식은 평가값이 참(true) 또는 거짓(false)인 식이다. 이런 조건식을 만들기 위해 사용하는 연산자들이 있는데 바로 관계연산자들이다. 관계 연산자의 대표적인 예는 >(부등호)가 있다. 만약 식이 1>3이라면 이 식의 평가값은 거짓(false)이고 여기서 사용된 관계연산자는 >이다. 이외의 다른 관계연산자는 다음 표와 같다.
여기서 참(true)와 거짓(false)은 bool형의 값이며 때때로 정수값으로 각각 1(true), 0(false)으로 표현하기도 한다. true의 경우 0이 아닌 정수로 표현할 수도 있다. 관계연산자에는 숫자 외에도 변수 또한 사용할 수 있다. 예를 들어 a == 1이라는 식의 평가값은 만약 변수 a의 값이 1이면 참일 것이다. 또한 >=나 !=와 같이 두 개의 기호로 이루어진 관계연산자는 두 개의 기호가 하나의 연산자를 나타내기 때문에 기호 사이에 공백이 있으면 안된다. 그리고 관계연산자 ==와 대입연산자 =의 차이를 잘 기억해두어야 한다.
관계연산자는 주로 조건문에서 자주 사용된다. 조건문이란 조건의 값이 참이면 조건문에 정의된 행동을 실행하는 구문이다. 대표적인 예로 if가 있다. if는 주어진 조건이 참일 때에만 정의된 작업을 실행한다.
if문
#include <iostream> int main() { int a = 1; if(a == 1) //a의 값이 1일 경우 실행 { std::cout<<"a == 1의 값은 참입니다"<<std::endl; std::cout<<"a의 값은 1입니다"<<std::endl; } return 0; }
if문에서 실행하려는 동작은 {}블록으로 묶어서 여러 개의 문장으로 나타낼 수 있다. 다른 코드들의 실행 순서와 마찬가지로 위에서부터 차례대로 실행된다. 하지만 {}블록으로 묶지 않았다면 if문 바로 다음 문장 하나만 if문에 의해 실행된다.
#include <iostream> int main() { int a = 1; if(a == 1) //a의 값이 1일 경우 실행 std::cout<<"a == 1의 값은 참입니다"<<std::endl; //이 문장만 if 조건문에 의해 실행 std::cout<<"a의 값은 1입니다"<<std::endl; //main함수 안의 일반 문장으로 실행 return 0; }
따라서 여러 문장을 처리하고 싶을 때에는 반드시 {}블록으로 묶어주어야 하고 가독성을 위해서 들여쓰는 것이 좋다. 또한 if문 사용시 조건문 뒤에는 세미콜론(;)을 사용하지 않는다는 점도 주의하여야한다.
if문과 함께 사용할 수 있는것으로 else문이 있다. else문은 if문의 조건식의 값이 거짓일 때 실행되는 부분이다. if문과 마찬가지로 {}을 통해 여러 개의 문장을 실행시킬 수 있다. 또한 조건에 따라 좀 더 세분화된 작업을 실행하고 싶다면 else if문을 사용할 수 있다.
else문과 else if문
#include <iostream> int main() { int a; std::cout<<"1또는 2를 입력해주세요"<<std::endl; std::cin>>a; if(a == 1) //a의 값이 1일 때 실행 { std::cout<<"1이 입력되었습니다"<<std::endl; } else if(a == 2) //a의 값이 1은 아니지만 2일 때 실행 { std::cout<<"2가 입력되었습니다"<<std::endl; } else //위의 두 조건 모두 거짓일 때 실행 { std::cout<<"1또는 2를 입력해주세요"<<std::endl; } return 0; }
if에서 사용되는 조건식은 논리 연산자를 이용해서 더욱 복잡하게 만들 수 있다. 논리 연산자는 전 포스팅에 있는 논리부정, 논리합, 논리곱 등이다.
조건1 && 조건2 //논리합, 좌/우변이 모두 참일경우 참 조건1 || 조건2 //논리곱, 좌/우변중 하나라도 참일경우 참 ! 조건 //논리부정, 우변이 거짓일경우 참
이 외에도 switch문, 또는 간단한 조건 판단에 사용하는 조건 연산자 등이 있지만 여기서는 다루지 않겠다.