if 문은 조건문이다.

 

조건 분기한다는 말인데 프로그램의 제어를 하는 문장이다.

 

C++ 프로그램은 main 함수의 첫번째 줄의 명령어에서 시작해서, 마지막 줄인 return 문에서 끝난다고 했다.

 

그렇게 되면 하나의 변화도 없이 위에서 내려올 뿐이라 단조로운 프로그램이다. 이런 프로그램에게 생동감을 주는 것이 if문이다. if문 부터 프로그램다운 모습이 나온다.

 

간단한 형식은 

 

if ( 표현식)

    명령문(Statement);

 

이다.

 

표현식은 true냐 false냐를 판단하는 결과값이 리턴된다. true 일 경우 실행되고 false일 경우 실행되지 않는다. 기준은 좀 특이하다. 0인 경우 false이고 그외 나머지 값은 true 다. 즉 0만 아니면 true 다.

 

1 도 true 99도 true 100.99 도 true 다.

 

if(1) 은 항상 표현식의 검사에서 true를 반환한다. true에서 if문의 명령문이 실행된다. 아래 네가지는 모두 true로 실행이된다.

    if(1){
        cout << "True!" << endl;
    }
    if(99){
        cout << "True!" << endl;
    }
    if(25.7){
        cout << "True!" << endl;
    }
    if(true){
        cout << "True!" << endl;
    }

 

 

if 문에는 관계연산식을 주로 사용한다. 관계연산식은 수학의 비교 연산과 비슷하다. 항상 그렇지만 컴퓨터는 수학과 비슷하지만 약간 다르다.

    int a = 10;
    int b = 7;

    if (a > b){
        cout << "a 는 b 보다 크다!" << endl;
    }

    if(a < b){
        cout << "a 는 b 보다 크지않다!" << endl;        
    }

a가 10으로 b의 7보다 크니까 첫번째 if문이 실행되었다. 두번째 if 문에서는 검사결과 false를 리턴해서 실행되지 않고 지나간다.

 

이 a < b 라는 표현식의 연산자를 관계연산자라고 한다. 중학 수학의 내용처럼 수의 크기를 비교한 후 참이면 true 거짓이면 false를 리턴한다. true 냐 false 를 판단하는 변수의 타입을 bool 형이라고 한다. 사실은 정수로도 표현된다. true는 1 false는 1이다. 아래의 문을 실행하면 1 (true 참)이 출력되는 것을 볼 수 있다.

cout << (a>b) << endl;

몇가지 비교 연산자들은 이미 친숙할 것이다. 다만 순서를 잘 지킬 필요가 있다. 예를 들어서 a <= b,  a는 b보다 작거나 같다를 a =< b 라고 쓰지 않는다.

 

*관계연산자 C++

이름 연산자 샘플 평가
같다 (Equals) == 70 == 70 true
70 == 0 false
같지 않다(Not Equals) != 70 == 0 true
70 == 70 false
보다크다(Greater than) > 70 > 50 true
50 > 70 false
보다 크거나 같다
(Greater than or Equals)
>= 70 >= 70 true
70 >= 90 false
보다 작다(Less Than) < 50 < 70 true
70 < 50 false
보다 작거나 같다
(Less Than or Equals)
<= 70 <= 70 true
70 <= 65 false

 

이 관계 연산자들을 활용해서 if 문을 작동시킬 것이다.

 

어느 때고 프로그램에서 조건을 비교하여 분기를 해야하는 경우에 사용하면 된다. 일상생활에서 자주 접하는게 조건문이므로 사용에 친숙할 것이다.

 

- 비가온다 -> 우산을 가지고 나간다. 

 

- 날씨가 춥다 -> 코트를 입고 나간다.

 

이것들은 사람들이 모두 무의식적으로 사용하는 if 조건 분기문이다.

 

자판기에 1000원짜리 한장을 넣었다. 콜라는 900원이고 주스는 1200원이다. 그런 경우 자판기는 if 조건문을 사용하여 콜라만 주문이 되도록 해놨다. 현재 돈 1000 < 주스 1200 에 false 이고 콜라는 900원이니 참(true)값을 리턴하는 것이다.

 

저 위에 표만 가지고 보면 마치 무슨 중학 수학같지만 실제로는 일상의 문제를 풀기위한 도구라고 보면된다. 수학을 못해도 문제를 해결하고자 하는 의지를 가진다면 다 풀리는 문제다. 알고리즘을 배우게 되면 if 문은 반복문과 더불어 어떻게 보면 가장 중요한 테크닉의 하나가 된다.

 

반복문에 if 문을 어떻게 조합시키냐에 따라서 모든 결과물이 나온다는 것은 놀라운 사실이다.

 

*if else 문

 

if 문을 알게 되면 else 문도 같은 것이라는 것을 알 수 있다.

 

if 조건문이 false 일때 대신 실행시키는 것이 else 문이다. if 가 아니면 else 가 실행되기 때문에 조건문이 따로 없다. 아니면 실행이다. A아니면 B이다. if else 문은 보통 하나의 참 혹은 거짓을 판별하고 그 나머지 경우의 수를 전부 몰아넣기 위해 사용한다. 때에 따라 유용하다. 

 

예를 들어 A는 인간이다. 그러므로 말을 한다. 라는 명제가 있다. 인간이 아닌 존재가 말을 하는 경우는 없다. (적어도 현재까지의 역사기록에는...) 그럼 A는 인간이 아니다 그래서 A는 말을 할 수 없다. 라는 것도 하나를 부정하면 다른 모든 경우를 지울 수 있는 경우에 속한다. 이런 경우 if else 문이 유용하다.

    int a = 5;
    int b = 7;

    if (a > b){
        cout << "a 는 b 보다 크다!" << endl;
    } else {
        cout << "a 는 b 보다 크지않다!" << endl;        
    }

*else if 문

 

세상만사가 다 if else 처럼 간단하면 좋겠는데 그렇지 않은 경우도 있다. 그럴때는 else if 문을 사용할 수 있다. 여러개의 if 조건을 차례로 검사하는 것이 else if 문이다. 다양한 방식으로 사용할 수 있다. 마지막엔 역시 else 로 그 외의 모든 상황을 몰아넣는다. (사실 이게 제일 편하나 예외를 놓칠 수 있다는 리스크가 있다)

 

왠만하면 경우의 수를 특정해서 최대한 else if 문을 줄이는 것이 좋다. C++ 에서 switch 문은 많이 쓰진 않지만 else if 문을 많이 쓰는 것을 방지하기 위해 있다. 가급적 줄이는 방법을 찾으려면 동일한 조건들을 최대한 묶어 나가는 방법이 좋다. 그리고 세부적인 것은 중첩 if 문으로 가둬버리는게 차라리 좋다.

    int score = 85;

    if (score >= 90){
        cout << "시험 등급은 A입니다!" << endl;
    } else if (score >= 80){
        cout << "시험 등급은 B입니다!" << endl;
    } else{
        cout << "시험 등급은 C입니다!" << endl;
    }

 

* 중첩 if 문 (nested if)

 

중첩 if 문은 생각보다 간단하다. 검사의 조건을 한단계씩 올리는 것이다. 최종 if 문의 실행은 곧 조건식들의 and 연산의 결과물이다. and연산은 단번에 결론을 내지만 중첩 if문으로 사용하면 단계적인 분기가 가능하다는 장점이 있다.

    int temperature = 38;

    if(temperature > 30){
        cout << "날씨가 덥습니다" << endl;
        if(temperature > 37){
            cout << "야외 활동에 주의합니다" << endl;
            if(temperature > 40){
                cout << "실내활동 시 열사병 등에 걸릴수 있습니다!" << endl;
            }
        }

 

* 논리연산자

논리연산자는 표현식간의 비교 후 true 아니면 false 값을 리턴한다.

 

AND 는 둘다 참인 경우에만 true 를 OR은 둘다 거짓인 경우에만 false 를 Not은 단순히 표현식의 리턴값을 부정한다. 0을 부정하는 경우만 참이되고 나머지는 다 거짓(false) 이다.

 

연산자 기호
AND &&  표현식1 && 표현식2
OR || 표현식1 || 표현식2
NOT ! !표현식

 

아래 코드의 경우 둘 중 하나의 표현식만 1이 되면 true 가 되어 if문을 실행한다.

if ( (x == 5) || (y == 5) )

이번 포스팅의 내용이 많다. 한번 본다고 다 익혀지는 것은 아닐 것이다. if 문과 그에 관련된 관계연산자 논리연산자 else 문 등이 있는데 사용하는 테크닉은 하나씩 알아가야 한다.

 

공유하기

facebook twitter kakaoTalk kakaostory naver band