The Pawn language - CompuPhase

조건문(if)

개요

조건문은 어떤 조건에 맞는 상황에서만 코드를 실행할 수 있도록 하는 문법입니다. 조건에 맞는다는 의미는 '조건식'이 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가 출력될 것입니다.

'80 <= score < 90' 과 같은 표현은 사용해서는 안됩니다. 일반적으로 Chain Rule은 프로그래밍 언어에는 적용되지 않습니다. 만약 위 표현을 사용한다면 '(80 <= score) < 90' 으로 처리되며, 'true < 90' 으로 최종 처리됩니다. 이는 우리가 의도했던 바와는 다른 동작입니다.

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문의 나머지를 제어하는 목적으로만 사용됩니다.

댓글

댓글 본문