개요
조건문은 어떤 조건에 맞는 상황에서만 코드를 실행할 수 있도록 하는 문법입니다. 조건에 맞는다는 의미는 '조건식'이 true가 됨을 의미합니다. 예제를 통해 살펴보겠습니다.
if 조건문
사용 방법은 아래와 같습니다.
if(조건식) { // 코드 }
조건식이 참(true)일 경우에만 코드가 실행되며, 조건식이 거짓(false)일 경우 코드가 실행되지 않습니다.
if 조건문: 예제 1 (단일 조건)
획득한 점수가 80점 이상일 때 Pass, 아니라면 Fail을 출력하려고 합니다. 아래 코드와 같이 작성할 수 있습니다.
new score = 90; if(score >= 80) { printf("Pass"); }
예제에서 조건식은 'score >= 80' 입니다. 연산자 챕터에서 배웠듯이 >= 연산자는 조건에 맞을 경우 true를 반환합니다. 현재 score가 90이기 때문에 'score >= 80'은 true를 반환합니다. 따라서 if(true)가 되므로 Pass가 출력됩니다.
score를 70 정도로 바꿔서 실행해 보시면 Pass가 출력되지 않음을 알 수 있습니다.
if 조건문: 예제 2 (다중 조건)
악랄하게도 이 교수는 점수가 80점 이상 90점 미만일 때에만 Pass를 준다고 합니다. 조건이 2개가 되었습니다. '80점 이상' 과 '90점 미만' 입니다. 두 개의 조건이 전부 만족될 때 Pass가 출력되어야 합니다.
new score = 85; if( (score >= 80) && (score < 90) ) { printf("Pass"); }
위와 같이 두 개의 조건을 &&(AND)로 묶었습니다. 두 조건을 모두 만족할 때에만 Pass가 출력될 것입니다.
if-else 조건문
새로운 개념을 알려드리겠습니다. else문 입니다. if-else문 이라고도 부릅니다. else는 if 조건문의 조건이 거짓(false)일 때 실행되는 코드를 의미합니다.
else문은 단독으로 쓰일 수 없으며, 항상 if문에 붙어서 동작합니다. 정의 자체가 if 조건문의 나머지를 의미하기 때문입니다.
위의 예제들은 Pass만을 출력하고, Fail은 출력하지 않았습니다. 조건을 잘 보시면 Pass와 Fail은 완전히 반대되는 조건이며, 서로 겹치지 않습니다. 이러한 상황에서 if-else 문을 사용할 수 있습니다.
new score = 65; if(score >= 80) { printf("Pass"); } else { // score < 80 printf("Fail"); }
예제 1의 코드에서 else 부분이 추가되었습니다. if의 조건문이 false 일 때 Fail이 출력됩니다. 논리적으로 생각해 본다면 else문의 의미는 'score < 80' 이라는 것을 알 수 있습니다. if 조건문의 정 반대입니다.
이 예제에서는 score가 65점이므로 'score >= 80' 조건이 false가 됩니다. 따라서 else 문으로 이동하여 Fail이 출력됩니다.
else if 조건문
또 새로운 개념을 배워봅니다. else if 조건문입니다. if 조건문이 false라면 else문으로 간다고 위에서 말씀드렸습니다. 이번에는 else 상황에서 조건을 다시 거는 방법을 소개합니다.
조금 더 학점을 나눠보도록 하겠습니다.
- 75점 이상: A
- 50점 이상 75점 미만: B
- 50점 미만: F
그림으로 보면 이렇게 됩니다.
코드로 짜면 다음과 같이 될 것입니다. (if 문의 { } 괄호를 생략했습니다.)
if(score >= 75) printf("A"); if(score >= 50 && score < 75) printf("B"); if(score < 50) printf("F");
3개의 학점 구간이 있으므로 조건식도 3개가 사용되었습니다. 그런데 잘 보시면 중첩되는 조건들이 발견됩니다.
- (score >= 75) 와 (score < 75)
- (score >= 50) 과 (score < 50)
위 조건들은 완전히 반대되는 조건들입니다. else 문을 이용해 생략이 가능할 것이라는 생각이 드셨다면 잘 하신 것입니다. 어떻게 가능할까요? 우선 A와 B 학점에 대해서만 생각해 보도록 하겠습니다.
if(score >= 75) { printf("A"); } else { // score < 75 if(score >= 50) { printf("B"); } }
위 코드를 잘 보시기 바랍니다. 만약 'score >= 75'에서 false가 발생한 경우 else문으로 이동합니다. 잘 생각해 본다면 else문의 의미는 사실 'score < 75'라는 것입니다!
B 학점을 위해서 else문 안에 'score >= 50' 조건문이 들어있습니다. 조건을 하나 생략하였죠? else문 안에 있음으로써 이미 'score < 75'라는 의미를 가지고 있기 때문에, 이를 생략하고 'score >= 50'만 적은 것입니다!
정리해서, 이를 새로운 개념인 else if를 이용하여 다시 작성해 본다면 아래와 같이 됩니다.
if(score >= 75) printf("A"); else if(score >= 50) printf("B"); else printf("F");
마지막에 있는 else문은 그 위의 if문과 else if문을 모조리 뚫고 떨어지는 나머지를 의미합니다. 이처럼 if-elseif문을 사용하여 범위를 효율적으로 제어할 수 있습니다.
역시나 else문과 else if문은 단독 사용이 불가능하며, if문의 나머지를 제어하는 목적으로만 사용됩니다.