개발하는 기획자

반응형

 지난 포스팅은 사용자가 아두이노 프로그래밍을 할 때 원하는 동작을 수행하게 하기 위한 조건문 if-else(else if 포함) 함수에 대해서 확인했었습니다. 

 

 이번 포스팅에서는 조건문 if 함수와 동일한 기능으로 사용되고 있는 다른 조건문 switch-case 함수에 대해서 알아보겠습니다.

 

  if-else 조건문 함수는 조건이 많아지게 되면 else if를 많이 사용하게 되는데, 프로그램을 작성해보면 느끼지만 코드가 길어지고 지저분하다! 라는 느낌을 쉽게 받을 수 있습니다. switch - case 조건문 함수는 이런 문제를 해결하고 코드의 가독성을 높여줄 때 많이 사용되는 조건문 함수입니다.

 

 일부 자료나 추가적인 검색을 통하면 위 자료(아 물론 위의 자료는 C가 아닌 다른 언어의 자료를 인용한 내용입니다.)처럼, switch-case 조건 함수가 if-else 조건 함수에 비해 성능이 좋은 부분을 확인할 수 있습니다. 우리가 느끼기에 큰 차이도 없을 뿐더러... 그 차이를 줄이기 위한 코딩을 하기에는 난이도가 너무 높다....!라는 문제점이 생깁니다. 결론은 기초 단계에서는 본인한테 편할걸 쓰면 됩니다.

 

 

 

 

 

1. 조건문 switch - case 함수


조건문 switch - case 함수는 다음 문법으로 사용이 가능합니다.

  switch (변수) {
    case 상수 : 실행문;

                   break;
    case 상수 : 실행문;

                   break;
    case 상수 : 실행문;

                   break;
    case 상수 : 실행문;

                   break;
    default : 실행문;

                break;
  }

 기본적으로 함수의 형태는 위와 같이 switch 뒤 괄호 안의 조건이 되는 변수를 선언한 뒤, case 뒤에 그 변수가 해당하는 조건에 따라 동작을 입력하는 형태입니다.

 case 상수 뒤는 세미콜론 ';' 이 아닌 콜론 ':'이 오는 것을 확인하고 그 뒤에 실행문이 동작된 뒤 break를 만나면 바로 해당 조건문을 탈출(switch 함수 밖으로 나와 코드를 계속해서 동작합니다.)하는 형태입니다.

 제일 아래 default 부분은 변수에 대한 조건이 없는 경우에 실행이 되는 부분을 의미한다. 즉, if-else 문에서 마지막 else와 같은 동작을 수행한다.

 

 여기서 조금 주의해야 될 부분은 break; 부분이 없다면, 조건문에서 탈출하지 않고 그대로 계속 실행이 된다는 점입니다. 해당 사항을 유의해서 조건문을 작성해야 됩니다.

 

 하지만 보통 if-else 조건 함수를 사용하는게 조금 더 편하게 느껴지고 활용도가 높은 편인데, 그 이유로는 조건이 되는 변수의 형태의 제약때문인 부분도 있습니다.

 switch-case 조건 함수에서는 정수형 또는 문자형 조건만 들어갈 수 있는 반면, if-else문에서는 조건식(예를 들어, i>0)의 형태가 될 수 있기 때문입니다. 그렇지만 정수형 또는 문자형 조건에서는 두 가지 중 편한 것을 골라 사용하시면 될 것 같습니다.

 

 재밌는 부분은 if-else 조건함수는 조건이 이상한 경우를 제외하면 switch-case 조건 함수로 변경하기에 굉장히 쉽다는 점인데, 이전 시간 예시 코드를 변경해본다면 다음 코드와 같이 됩니다.

int led_pin = 12;
int a, b, c = 0;
char input;

void setup() {
  // put your setup code here, to run once:
  pinMode(led_pin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  while (Serial.available() > 0)
  {
    input = Serial.read();
  }


  switch(input) {
  	case 1 : digitalWrite(led_pin, HIGH);
    		 break;
    case 2 : digitalWrite(led_pin, LOW);
    		 break;
    default : digitalWrite(led_pin, HIGH);
    		  delay(1000);
    		  digitalWrite(led_pin, LOW);
    		  delay(1000);  
              break;
  }
}

 

 

 

 기회가 된다면 아두이노에서 동일한 조건문으로 성능 차이를 한 번 확인할 수 있는 포스팅을 따로 한 번 준비해보겠습니다. 그리고 아두이노 동작 코드로 예시만 줘서 이해하기 조금 힘들 수 있다는 생각이 들어 실제 C프로그래밍 코드로 동작을 확인하고, 아두이노 보드에서 동작까지 확인해서 비교할 수 있는 포스팅을 준비하겠습니다. 감사합니다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaostory naver
-->