조건문 - if

Date:     Updated:

카테고리:

조건문 - if

if 조건문을 배워보기 전

  • 프로그래밍에서는 특정 조건, 혹은 특정 변수의 데이터에 따라 다른 출력, 혹은 다른 동작을 해야 할 때가 많다. 현실에서도 많은 조건들에 따라 사람이 행동하듯 우리는 프로그램에게 ~~상황에서는 ~~라는 동작을 해야 해.라고 알려주는 셈이다. 과장을 조금 더 보태면 모든 프로그램은 변수와 if문만을 가지고 작성할 수도 있다라는 말이 있을 정도로 형태는 차이가 있을 수 있지만 거의 대부분의 프로그래밍 언어에서 가장 빠르게 접하고, 자주 사용되는 문법일 것이다. 이번 포스팅에서는 if문에 대해 알아보고, 간단한 예제 코드를 작성하는 시간을 가져보겠다

전설의 프로그래머 밈

  • 프로그래밍을 배워보지 않은 사람도 한번 쯤은 접해봤을 전설의 밈이 하나 있다.

ifStatement_01

  • 위의 밈은 프로그래밍적 사고를 아주 정확히 나타내줄 수 있는 밈인데..아내가 마트에서 우유를 사오는데 아보카도가 있다면 6개를 사오라고 하는 내용이다. 이렇게까지 할 필요 없음에도 필자는 괴짜에 가깝기 때문에 굳이 코드화 해보자면 대충 아래와 같이 표현할 수 있을 것이다.
// 남편의 두뇌
int main()
{
    // 아보카도가 있는가 = Yes
    bool IsAvocadoExist = true;

    // 아보카도가 있다면
    if (IsAvocadoExist == true)
    {
        // 우유를 6개 산다
        BuyMilk(6);
    }
    else  // 아니라면
    {
        // 우유를 한개 산다
        BuyMilk(1);
    }
}
  • if문은 사용 방법이 아주 심플하기 때문에 더할 나위 없이 깔끔한 코드가 작성된다. 조건을 충족하는지 판단하고 충족할때와 그 예외의 상황 처리도 할 수 있는데, 그 흐름을 살펴보자면 아래 그림과 같다

ifStatement_02

  • 조건에 따라 동작이 달라진 다는 것은, 작업의 흐름 상에서 분기가 갈리는 것과 같다. 그렇기 때문에 조건문은 분기문으로 불리기도 한다. 자세한 사용 방법은 다음 챕터에서 살펴보자.

어떻게 사용하는가

  • if문의 사용 방법은 아주 쉽다. if + (조건식) + { 로직 }으로 이뤄지며, 추가적으로 예외의 상황에 사용될 else를 붙여 사용할 수 있다. 조건식이 true, 즉 참일 때 if문 내부의 구문이 실행되며, 아래는 if문의 사용 방법을 알아보기 위한 예시 코드이다.

예시 코드

int main()
{
    int A = 5;
    int B = 16;

    // A, B 두 변수의 합이 20 초과라면
    if (A + B > 20)
    {
        // 이 구문을 실행하고
        std::cout << "두 변수의 합은 20보다 크다";
    }
    else if (A + B == 20) // 20과 같다면
    {
        // 이 구문을 실행하고
        std::cout << "두 변수의 합은 20이다";
    }
    else // 위의 두 조건이 모두 만족하지 않는다면 (20 미만이라면)
    {
        // 이 구문을 실행한다.
        std::cout << "두 변수의 합은 20보다 작다";
    }
}

결과

  • ifStatement_03

  • 의도한 결과대로 5와 16의 합은 21이기 때문에 가장 첫 조건식인 if(A + B > 20) {}의 구문이 실행되었을 것이다. 값을 바꿔서 실행해 본다면, 각 조건식에 맞는 결과를 확인할 수 있다. 다만 예시에서는 else if를 사용했는데, 이는 단순히 if를 여러번 사용하는 것 과는 차이점이 있다. 아래의 예시를 보고 판단해보겠다

예시 코드 2

int main()
{
    int A = 50;

    // A변수의 값이 20 초과라면
    if (A > 20)
    {
        // 이 구문을 실행하고
        std::cout << "A변수의 데이터는 20보다 크다";
    }
    else if (A > 25) // 25 초과라면
    {
        // 이 구문을 실행하고
        std::cout << "A 변수의 데이터는 25보다 크다";
    }
    else if (A > 30) // 30 초과라면
    {
        // 이 구문을 실행한다
        std::cout << "A 변수의 데이터는 30보다 크다";
    }
}
  • 코드를 살펴보면, A의 데이터는 50이고, 조건식들은 차례대로 20초과, 25초과, 30초과 라는 조건을 가지고 있다. 즉, 모든 조건이 충족된다는 말인데 결과는 어떻게 출력될지 확인해보자

ifStatement_04

  • 모든 조건식이 참이기 때문에 모든 구문이 실행될 것 같지만 맨 위의 구문만이 실행되는 것을 확인할 수 있다. 이로서 알 수 있는 것은 else if문을 사용해 여러 조건을 추가하고, 여러 조건이 충족될 경우 위에 있는 구문이 우선적으로 채택된다는 점이다.

사용시 주의점

  • 당연히도 if문 내부에서 추가 if문을 사용해 여러 조건을 추가할 수 있다. 분명 if문 내부에서 if문을 다중으로 사용하는 것은 흔한 일이고 사용할 수 밖에 없는 상황이란 것도 있지만, 자칫 잘못하면 언어는 다르지만 아래와 같은 형태가 만들어지는 불상사를 초래할 수도 있다.

ifStatement_05

  • 미관상…도 그렇고 코드 가독성 면에서도 큰 이점을 보기 힘들기 때문에, 아래와 같이 연산자를 사용해 여러 조건식을 한번에 걸거나
int main()
{
	int A = 50;

	// A변수의 값이 20 초과, 60 이하임을 모두 만족할 때 (AND)
	if (20 < A && A <= 60)
	{
		// 구문 실행
	}

	// A 변수의 값이 30과 같거나, 40과 같거나, 50과 같을 때(OR)
	// 즉, 조건을 하나라도 만족할 때
	if (A == 50 || A == 40 || A == 30)
	{
		// 구문 실행
	}
}
  • 조건이 충족되지 않는다면 로직(함수)을 종료시키는 등의 처리를 한다면 가독성을 향상시킬 수 있다.
void Sum(int a, int b)
{
    // a가 0 이하, b가 0 이하인 조건 중 하나라도 만족한다면
    if (a <= 0 || b <= 0)
    {
        // 함수를 중단한다
        return;
    }

    std::cout << a + b;
}

int main()
{
    // 실행되긴 하지만 내부 로직에서 중단된다
    Sum(-5, 10); 

    // 실행된다
    Sum(3, 17); 
}

댓글 남기기