조건문 혹은 분기문으로 불리는 if문은 특정한 조건에 의해서 선택적으로 실행할 수 있게 만드는 구문이다.
개인적으로 if문만 있어도 모든 코드를 작성할 수 있을 정도로 굉장히 중요하다고 생각했으며
배우면서 가장 재미있고 흥미로웠던, 프로그래밍 언어의 꽃 이라고 생각한다.
#include<iostream>
int main()
{
int num = 5;
if(num > 1 && num < 10 )
{
std::cout << "조건문의 조건이 참입니다.";
}
}
if문의 기본 입력 방식은 위와 같이 if 뒤의 소괄호에 조건을 넣고, 중괄호(코드블럭)안에 실행 코드를 입력하는 것이다.
if문이 동작하는 방식은, 소괄호 안의 조건을 검사해 조건이 참이면, if문 안의 코드가 실행되고,
소괄호 안의 조건이 거짓이라면 if문의 코드블럭을 실행하지 않고 건너뛰는 것이다.
소괄호 안의 조건은 위와 같이 비교연산자와 논리연산자로 정해줄 수 있다.
그렇다면 if의 조건이 아닐 때 작동하는 방법은 없을까?
위의 식을 예로 든다면,
num변수가 1보다 크고 10보다 작지 않을 때에도 특정 코드가 실행되게 하고 싶다면 어떻게 해야할까?
그럴 때 사용할 수 있는 것이 else와 else if 구문이다.
#include<iostream>
int main()
{
int num1 = 2;
int num2 = 4;
if(num1 > num2)
{
std::cout << "num1이 num2보다 큽니다." << std::endl;
}
else if(num2 > num1)
{
std::cout << "num2가 num1보다 큽니다." << std::endl;
}
else
{
std::cout << "num1과 num2가 서로 같습니다." << std::endl;
}
// 출력값 : num2가 num1보다 큽니다.
}
else와 else if는 if가 있어야만 동작하는 구문으로, if의 조건이 만족하지 않는다면 실행된다.
코드는 위에서부터 순서대로 읽기 시작하기 때문에 if문의 조건을 먼저 검사하고,
조건이 거짓이라면 다음 조건으로 넘어간다.
이 때 else if문이 있다면, 맨 첫번째 else if문을 가장 먼저 검사한다.
맨 첫번째 else if문이 거짓이라면, 두번째 else if 문으로 가며 순차적으로 검사를 시작한다.
if와 else if문의 조건이 모두 거짓이라면 마지막으로 else문의 코드가 실행된다.
#include<iostream>
int main()
{
int num = 4;
if(num)
std::cout << "내가 출력이 될까 안될까?";
}
위와 같이 if문의 조건을 비교연산자로 정하지 않고 변수의 값을 넣으면 어떻게 될까?
위 처럼 if문에 조건이 참, 거짓으로만 나오는 경우가 아니어도 컴파일러는 빨간줄을 긋지 않았다.
위 문장은 맞는 문장인걸까?
정답은 맞는 문장이 맞다는 것이다.
컴퓨터는 참과 거짓의 구분을 0과 1로 짓는다.
이 때, 참은 무조건 1이어야하고, 거짓은 무조건 0이어야 하는 것이 아니라,
0은 거짓, 그리고 0이 아닌 모든 수는 참 이라고 여긴다는 것이다.
따라서 0이 아닌 정수 4의 값을 가지는 num변수는 참으로 취급되어 if문 안의 코드가 실행되어
문장이 출력이 된다.
추가로, 위처럼 if문이나 else if문, else문은 그 내용이 한 줄 뿐이라면 중괄호를 생략하고 입력하는 것이 가능하다.
#include<iostream>
int main()
{
int num1 = 5;
int num2 = 4;
if(num1 != num2)
{
std::cout << "num1과 num2의 값이 서로 다릅니다." << std::endl;
if(num1 > num2)
{
std::cout << "num1이 num2보다 큽니다." << std::endl;
}
else
{
std::cout << "num2가 num1보다 큽니다." << std::endl;
}
}
else
std::cout << "num1과 num2의 값이 서로 같습니다." << std::endl;
}
또, 위의 식 처럼 if구문 안에 if구문을 넣는 것이 가능하다.
단, 위의 식처럼 if구문을 통과할 때 마다 처리할 값이 없다면 else if 구문으로 처리하여 가독성을 높이는 것이 좋다.
if문 속의 if문이 많으면 많을 수록 복잡해보여 가독성이 떨어지기 때문에 되도록이면 분기문은 간결하게 정리하는 것이 좋다.
가독성이 떨어지면 협업하는 다른 사람 뿐만 아니라 코드를 짜는 본인조차 헷갈릴 수 있어 작업속도에 영향을 주기 때문에,
코드의 가독성을 높이기 위한 과정은 선택이 아닌 필수사항이다.
#include<iostream>
int main()
{
int num1 = 4;
int num2 = 5;
int result;
if(num1 > num2)
result = num1 - num2;
else
result = num2 - num1;
result = (num1 > num2) ? num1 - num2 : num2 - num1;
}
6 - 6. 삼항연산자 파트에서 삼항연산자와 if else구문의 유사성을 설명했던 적이 있다.
위의 식에서, result는 삼항연산자를 거친 값이나, if else문을 거친 값이나 서로 같다.
삼항연산자에서는 num1 > num2이 참인지 검사하고
그것이 참이면 : 연산자 앞의 값을, 거짓이라면 : 연산자 뒤의 값을 출력하는데
if else 구문에서도 마찬가지로 num1 > num2 의 값이 참인지 검사하고
그것이 참이면 if문의 코드를, 거짓이라면 else문의 코드를 실행하는 점에서 논리적으로 같다.
하지만 6 - 6. 삼항연산자 파트에서 서술했듯, 삼항연산자의 식이 복잡해지면 가독성이 떨어지기 때문에
간단한 분기와 결과값을 가진 코드만 삼항연산자로 코딩하고,
그렇지 않다면 if else구문으로 코딩하는 것이 가독성 측면에서 유리하다.
'C++ 일기' 카테고리의 다른 글
| 9 - 1. 반복문 while (0) | 2024.02.23 |
|---|---|
| 8. switch문 (0) | 2024.02.21 |
| 6 - 6. 삼항연산자 (0) | 2024.02.20 |
| 6 - 4. 비교연산자 ( <, >, <=, >=, !=, ==) (0) | 2024.02.20 |
| 6 - 5. 논리연산자 ( &&, ||, !) (0) | 2024.02.20 |