if문에 해당하는 글 1

[아두이노] 아두이노 코딩 IF문

IOT/아두이노기초문법|2019. 4. 11. 09:00

[아두이노] 아두이노 코딩 IF문



오늘은 제어문 중에 IF문에 대해 설명하고자 합니다. IF문은 어떻 구조이고 어떤 느낌인지 그리고 코딩할때는 어떤 느낌일 때 IF문을 사용하는지에 대해서 알아봅시다.

1. 비교연산자



위 표에 나와 있는 비교연산자의 의미를 잘 기억해 두세요. 다음에 다룰 IF문에서 조건문으로 사용하는 표현입니다.

2. IF문



IF문은 기본적으로 3개의 형식으로 구분하여 살펴 볼 수 있습니다. 위 표가 약간 가독성이 떨어지게 표현 되었는데 자세히 한번 읽어보세요. IF문은 조건식이 참이냐 거짓이냐 두가지 상태로 나눌 때 사용합니다.

예)


조건식이 밥을 먹었는지 체크했는데 참이면 "응! 먹었어"라고 답변할 것이고 거짓이면 "아니! 안먹었어!"라고 답변하게 됩니다. 이렇게 IF문은 조건식으로 참 or 거짓으로 나눌때 사용합니다. 대충 어떤 느낌인지 아시겠지요.

이제 if문 표현들을 살펴보도록 하겠습니다.

1) IF문

if(조건식) { 참 명령; }

if(조건식)은 조건식이 참이냐 거짓이냐 구분 할 때 사용합니다.

  if(a>b) { 
    Serial.println("a>b");
  }

이 문장을 잘 살펴보세요. if문의 "a>b"의 조건식이 참이되면 if문의 영역인 중괄호({...}) 안의 문장을 수행합니다. if문만 딸랑 있고 중괄호로 되어 있으면 거짓이면 if문 안에 문장을 수행하지 않고 지나가고 참이면 if문 안의 있는 문장을 수행한다고 생각하시면 됩니다.

즉, a>b가 참이면 시리얼모니터에 "a>b"라는 문장이 출력되고 만약 a>b가 거짓이라면 a가 b보다 크지 않다는 의미로 시리얼모니터로 아무런 문장도 출력하지 않습니다. 오로지 참일때만 시리얼모니터로 "a>b"가 출력됩니다.
[ 블록 ]


블록 코드를 보시면 IF문이 "a>b"가 참일때 안에 파란블록 println()문이 수행되고 거짓일때는 그냥 지나 갑니다. 블록으로 코딩하면 이 블록은 loop()함수으로 코딩되어 무한반복하니깐 의미만 이해하시고 text창에서 아래와 같이 코딩하세요.

[ 소스 ]

void setup()
{
  Serial.begin(9600);

  int a = 10;
  int b = 5;
  if(a>b) { 
    Serial.println("a>b");
  }
}

[ 결과 ]


여기서, 거짓일 때 b가 더 크다는 표현을 출력하고 싶지 않으세요. 그런 표현이 다음 두번째 형식입니다.

2) IF~else 문

  if(a>b) { 
        Serial.println("a>b");
  }
  else {
        Serial.println("b>a");
  }

위 식에서는 else문이 추가 됩니다. if문이 조건식이 참이면 "a>b"문장이 출력되지만 조건식이 거짓이면 else이하 문장을 수행합니다. 이말은 if문이 참일때 if문을 수행하고 거짓일때는 else 문을 수행한다고 구분 지으면 됩니다.

if(조건식) { 참 }
else { 거짓 }

이 부분을 머리속에 넣어주세요.

[ 블록 ]


파란블록을 잘 보세요. "a>b"참일때 "a>b"가 출력되고 거짓일때 "b>a"가 출력됩니다. 블록으로 대충 어떤 느낌인지만 잘 구분해 주세요.

[ 소스 ]

void setup()
{
  Serial.begin(9600);

  int a = 5;
  int b = 10;
  if(a>b){
        Serial.println("a>b");
  }
  else {
        Serial.println("b>a");   
  }
}

[ 결과 ]


결과창에 소스를 보시면 약간 차이가 있는 것을 보실꺼에요 중괄호"{"와 "}"가 사라졌습니다. if문에서는 만약 수행할 명령문이 한줄일 경우는 중괄호를 생략 가능합니다. 위 소스에서는 중괄호를 넣고 결과에서는 중괄호를 생략한 이유는 우선 중괄호를 넣고 if문의 영역을 구분하고 그 영역을 참일때와 거짓일때 수행된다는 개념을 잡기 위해서 중괄호를 넣었어요. 처음 배우시는 분들은 한줄이라도 중괄호를 넣어주세요. 익숙해지면 한줄짜리를 생략하시고요. if문에 대한 의미를 이해하시는게 중요하니간 중괄호를 넣는 습관을 가져주세요.

[ 참고 사항 ]
위 코딩에는 약간 문장 상 문제가 있습니다. 뭘까요. "a>b" 크지 않다고 해서 b가 크다고 말할 수 없습니다. 그것은 "a==b"가 같을 수 있는 조건이 나오기 때문입니다.

즉,

void setup()
{
  Serial.begin(9600);

  int a = 5;
  int b = 10;
  if(a>b){
        Serial.println("a>b");
  }
  else if(a==b){
        Serial.println("b==a");   
  }
  else {
        Serial.println("b>a");   
  }
}

위와 같이 코딩을 해야 합니다. 한번 위와같이 코딩하시고 a, b 변수의 값을 동일한 값으로 넣어보세요. 그리고 시뮬레이터에서 실행시켜서 시리얼모니터에 어떤 문장이 수행되는지 살펴보세요.

비교 대상이 여러개 일때는 IF ~ else IF 문을 통해서 비교가 이루어집니다. 첫번째 조건식이 거짓이면 두번째 조건식을 비교해서 참 or 거짓을 결정하는데 만약에 두번째 조건식에도 거짓이면 else 문이 수행되는 표현입니다.

다음에 이 제어문에 대해서 살벼도록 하겠습니다.

3) IF ~ else IF 문

마지막 세번째 형식은 IF문이 하나 더 추가하는 방식입니다. IF문이 참과 거짓 두가지 상태뿐이 없습니다. 그런데 비교 대상이 둘 이상일때가 생기게 됩니다. 예를들어 시험을 보고 영어 점수의 학점을 주려고 할때 "A,B,C,D,E,F" 학점을 줄때 IF문으로 하면 어떻게 될까요.

영어  = 75점;
if(영어>=90){ A학점}
else{
  if(영어>=80){ B학점}
  else {
      if(영어>=70){C학점}
        else{
          if(영어>=60){D학점}
            else {
              F학점
            }
        }
    }
}

이렇게 표현해야 됩니다. else 이하 문으로 계속 if문이 추가되지요 이렇게 복잡하게 표현하지 않고 다음과 같이 간단히 표현됩니다. 비슷한 의미인데 가독성으로 이렇게 표현 하지요.

영어  = 75점;
if(영어>=90){ A학점}
else if(영어>=80){ B학점}
else if(영어>=70){C학점}
else if(영어>=60){D학점}
else {F학점}          

만약 영어가 90이상이면 A학점
거짓이면 영어가 80점이상이면 B학점
거짓이면 영어가 70이상이면 C학점
거짓이면 영어가 60이상이면 D학점
거짓이면 F학점

어떤 입력값에 대한 여러개의 비교가 필요할 때 이렇게 IF문을 활용하게 됩니다. 이런 표현을 잘 숙지해 주세요. 여기서 다중 IF문의 의미를 잘 이해하시면 다양한 곳에서 활용이 가능합니다. 다중 IF문에서 조건식이 참과 거짓의 의미를 약간 혼동하시는 분들이 많습니다.

위 표현은
90이상
89~80
79~70
69~60
60미만

이걸 의미하는데 잘 매칭이 안되는 분들이 많은 것 같아요. 실제 영어 점수를 다르게 입력해서 어디에서 멈춰 결과가 출력되는지 체크를 여러번 하셔야 표현의 의미를 알 수 있습니다.

[ 블록 ]


[ 소스 ]

void setup()
{
  Serial.begin(9600);
  
  int Eng = 75;
  if (Eng >= 90) Serial.println("A");
  else if (Eng >= 80) Serial.println("B");
  else if (Eng >= 70) Serial.println("C");
  else if (Eng >= 60) Serial.println("D");
  else Serial.println("F");
}

[ 결과 ]


75니깐 C학점으로 출력되었네요. 75점이니 C+이 되어야 겠지만 암튼 대충 다중 IF문까지 코딩 해 봤습니다. 이 세가지 표현 방식을 가상시뮬레이터에서 그대로 코딩해보세요. 위 예제대로 하셔도 되고 다른 것을 생각하셔서 IF문을 적용하셔도 됩니다.

IF문 어디서 사용할까요?


코딩을 하면 IF문을 사용안하는 곳이 없습니다. 대부분 IF문을 사용합니다. 아두이노에서는 체크문으로 많이 사용합니다. 센서에서 입력된 값이 정상적으로 들어왔는지 확인할때 사용합니다. 또는 센서의 값을 읽어왔는데 그 값에 따라서 특정한 동작을 수행할 때도 사용합니다.

예를들면,

int val = digitalRead(센서디지털핀);

이와 같은 표현으로 센서값을 읽어올 경우에 val에는 디지털 신호 1과 0의 값을 갖게 됩니다. 그러면 IF문으로 사용하게 된다면 이렇게 표현을 할 수 있습니다.

if(val!=0){
  val은 1입니다.
}
else {
 val은 0입니다.
}

두가지 상태로 나눌 수 있게 됩니다. val 1일때 1의 문장을 수행하고 val 0일때는 0의 문장이 수행 될 수 있습니다. 만약, LED를 제어 한다면은 어떻게 될까요. LED가 13번 핀에 연결되었다고 가정를 해봅시다.

if(val!=0){
 digitalWrite(13,HIGH);
}
else {
 digitalWrite(13,LOW);
}

val이 1이면 13번 디지털핀에 HIGH(5V)상태로 5V의 전류가 공급됩니다. val이 0이면 13번 디지털핀에 LOW(0V)의 전류가 공급됩니다. 즉, 13번 핀은 센서의 값이 1일때 불이 들어오고 센서의 값이 0일때 불이 꺼지게 됩니다.

이렇게 IF문을 통해 두가지 상태를 제어할 수 있게 됩니다.

마무리


오늘은 IF문을 배웠습니다. IF문의 의미와 사용법을 잘 이해해 주세요. 아두이노에서 대개 제어를 할때 IF문을 활용하여 특정한 명령을 내리게 됩니다. 주의할 것은 IF문은 참과 거짓으로 이 두가지 상태만 있지만 그렇다고 해서 1과 0의 두가지 상태만 있는게 아닙니다. IF문은 0이 아닌 모든 것이 참이 됩니다. 햇갈리 수 있는데요. 조건식이 0이 아니면 IF문은 참이 된다는 소리가 됩니다. IF(조건식)에서 조건식의 결과가 0이 아니면 무조건 참이라는 의미가 됩니다. 1도 참이고 1.2도 참이고 2도 참이라는 소리입니다. 좀 표현이 그렇지만요 0과 아니면 조건식은 무조건 참인데 우선은 IF문은 참과 거짓으로 두가지 상태로 나뉜다고만 구별해서 사용하시고 너무 복잡한 생각은 잠시 미뤄주세요.

오늘 배운 IF문의 의미만 잘 이해하시면 아두이노를 재미있게 즐길 수 있습니다. 그냥 편하게 일상의 대화처럼 위에서 표현대로 IF ("너 밥먹었니") 참이면 "응! 먹었어!" 거짓이면 "아니! 안 먹었어!" 라고 일상의 표현들로 IF문을 사용해 보세요. 계속 그렇게 문장을 만들고 상상을 하시면 IF문은 어떤 느낌인지 느끼실 꺼에요.

댓글()