플러터(Flutter)의 조건문 (if ~ else)

    플러터(Flutter)에서 사용하는 다트(Dart) 언어는 고수준 언어(ex: C, Java)와 유사하게 다양한 조건문을 제공하는데 가장 많이 활용하는 if ~ else 문부터 Switch 문 그리고 삼항 연산자를 제공합니다. 이번 포스팅은 가장 많이 사용하는 if ~ else if ~ else문에 대해서 알아보도록 하겠습니다.

     


    IF ~ ELSE 문

    IF 조건문의 사용법

    if (조건1) {
    	// 실행해야 될 코드
    } else if (조건2) {
    	// 실행해야 될 코드
    } else if (조건3) {
    	// 실행해야 될 코드
    } else {
    	// 실행해야 될 코드
    }

     

    if 조건문은 위와 같이 if 그리고 조건이 또 있을 경우 else if 를 필요한 만큼 사용하며, 그 외의 조건은 else를 사용합니다. if 조건에서 필수는 if 문이며, else if와 else는 사용하지 않아도 작동이 가능하지만, 만약 써야 된다면 if -> else if -> else 혹은 if -> else 혹은 if -> else if 를 써야 합니다.

     

    if와 else if 그리고 else는 위에서 아래로 순서대로 실행이 되며, 해당 조건이 맞을 경우, 조건 내부에 있는 코드를 실행하며 조건문에서 나가게 됩니다. 조건문이 여러개 있을 경우 else if 을 여러개 사용해서 처리해야 하며, if와 else는 하나만 사용이 가능합니다.

     

    IF 조건의 잘못된 코드 (순서)

    if (조건) {
    } else {
    } else if {
    }

    위와 같은 경우 if로 시작하는 것은 맞았지만 else if 와 else의 순서가 잘못되었습니다. else는 그외란 의미가 담겨져 있기 때문에 중간에 그외가 된다면, 마지막 else if가 무시되기 때문입니다.

     

     

    IF 조건문 예시

    다음은 국어점수와 수학점수, 영어점수의 평균을 계산한 후, 평균 90점 이상 A, 80점 이상 B, 70점 이상 C, 60점 이상 D이며 그 이하가 있거나 하나라도 60점 이하가 있을 경우 F 학점을 주는 프로그램을 짜보도록 하겠습니다.

     

    void main() {
      String grade = "";
     
      int korean = 70;
      int english = 65;
      int math = 80;
      num avg = (korean + english + math) / 3;
      
      print("평균은 ? $avg");  
      
      // 과락 먼저 체크
      if(korean <= 60 || english <= 60 || math <= 60) {
        grade = "F";
      } 
      else if (avg >= 90) {
        grade = "A";
      }
      else if (avg >= 80) {
        grade = "B";
      }
      else if (avg >= 70) {
        grade = "C";
      }    
      else if (avg >= 60) {
        grade = "D";
      }  
      
      print("등급은 ? $grade");
    }

     

    실행 결과

     

    국어점수는 70점, 수학점수는 65점,  영어 점수는 80점을 준 이 예제에서 처음에 if 조건에 과락을 먼저 체크하고 있습니다. 과락을 먼저 체크하지 않으면, if 조건이 복잡해지기 때문입니다. 혹은 위에 같이 같은 Depth의 if조건에 체크하지 말고 if ~ else 식으로 한번 더 만들어서 하는 방법도 있습니다.

     

    // 과락 먼저 체크
      if(korean <= 60 || english <= 60 || math <= 60) {
        grade = "F";
      } else {
        if (avg >= 90) {
          grade = "A";
        } else if (avg >= 80) {
          grade = "B";
        } else if (avg >= 70) {
          grade = "C";
        } else if (avg >= 60) {
          grade = "D";
        }   
      }

     

    개인적으로는 아래와 같은 방식을 더 선호합니다. 과락을 체크 하는 것과 스코어를 체크하는 것은 별개의 로직이기 때문이죠.

     

    if ~ else를 배울 때 성적을 예시로 가장 많이 사용하는 이유는 과락이라는 개념과 성적이라는 것이 순서대로 등급이 있기 때문입니다. 그렇기에 if 와 else if에 대해서 가장 이해하기 쉽습니다. 만약 위 로직에서 ABCD의 순서대로 코딩을 하지 않고, A,C,D,B와 같이 순서가 뒤죽박죽 되었으면 어땠을까요?

     

    if (avg >= 90) {
      grade = "A";
    } else if (avg >= 60) {
      grade = "D";
    } else if (avg >= 70) {
      grade = "C";
    } else if (avg >= 80) {
      grade = "B";
    }

     

    만약 위의 내용처럼 A다음에 D를 넣었다면, C와 D의 로직을 체크하기전에 D의 로직에서 끝이 날 것입니다. 70점 이상과 80점 이상은 60점 이상이 모두 흡수하기 때문입니다.

     

    등급이 D로 표시되는 오류가 생겨버린다

     

    이럴 때를 방지하기 위해서는 if 조건의 조건 문을 좀 더 튼튼하게 짜는 방법이 있습니다.

     

    if (avg >= 90) {
      grade = "A";
    } else if (avg >= 60 && avg < 70) {
      grade = "D";
    } else if (avg >= 70 && avg < 80) {
      grade = "C";
    } else if (avg >= 80 && avg < 90) {
      grade = "B";
    }

     

    위와 같이 그리고(&&)를 써서 조건문을 하나 더 추가를 하면 훨씬 단단한 if 조건이 될 것입니다. 물론 이렇게 코딩을 하닥 실수로 미만(<)을 써야 될 부분에 이하(<=)를 넣는다든지 해서 예상치 못한 에러가 발생할수도 있으니 뭐가 낫다라고는 확실히 말을 하기에는 힘이 듭니다. 특히 copy & taste를 하다가 실수로 조건문이 잘못되는 경우도 많으니, 조건문은 상황에 따라 잘 써야 되겠습니다.

     

    연관 포스팅

    [Flutter/Dart] 다트의 조건 연산자들(등가, 관계, 논리)

     

    [Flutter/Dart] 다트의 조건 연산자들(등가, 관계, 논리)

    플러터(Flutter)에서 사용하는 다트(Dart) 언어는 고수준과 유사하게 다양한 조건을 위한 연산자들을 제공합니다. 2개의 값을 비교해서 같은지 아닌지를 비교하는 등가 연산자, AND와 OR를 체크하는

    needneo.tistory.com

     

    반응형

    댓글

    Designed by JB FACTORY