이더리움 개발 - 누구나 할 수 있는 솔리디티(Solidity) 언어 (IF 조건문) #3

    2번째 강의는 정수형 변수부터 주소형 변수까지 한번 간단히 알아보고, 문자열 변수의 아주 간단한 예제를 만들어 봤습니다. 오늘은 바로 전 강의보다 아주 약간 복잡한 조건문에 대해서 알아보도록 하겠습니다. 


    이 강의는 개발자분들에게는 매우 간단하지만, 개발을 해본적이 없는 분들은 이해하기 약간 버거울 수 있다는 점을 염두하시면 되겠습니다. 개발자분들은 1~2분안에 포스팅을 모두 읽고 후딱 넘어갈 수 있겠네요.



    아직 강의를 들어본적이 없는 솔리디티에 대해서 이해를 잘 못하시는 분들은 이전 강의를 듣고 오시는 것을 권유드립니다.




    오늘은 IF 조건문에 대해서 강의를 할 예정입니다. IF 조건문이란, 프로그램 언어에서 거의 대다수가 지원하는 기능으로서, IF 조건안에 들어가는 말이 진실이면, IF 조건문 괄호 안에 있는 내용을 실행하고, 거짓이면 다음 조건으로 넘어가는 로직입니다.


    보통 IF 조건문으로 가장 적절한 예제를 성적으로 등급(A~F까지)을 부여하는 알고리즘을 연습합니다. 이 것보다 설명하기 좋은 예제는 찾기 힘든 것 같아서 이번 강의의 최종 내용은 솔리디티로 성적(정수값)을 입력하였을 때, 등급(문자열)을 출력 하는 예제를 하겠습니다.


    IF 조건


    IF 조건은 괄호안에 있는 내용이 참일 경우, 해당 내용을 수행하고 아닐 경우 수행을 하지 않는 로직입니다. 예를 들어 IF(나는 남자다) 라고 할 경우, 현재 나란 사람은 남자기 때문에 조건이 맞다라고 가정을 하고 다음 구문을 수행하게 됩니다.


    실행 방법

    if(조건문) {

       // 수행할 로직 입력

    }



    예시

    // 학생 변수를 선언

    string student;


    // 스코어가 90이상 일 경우

    if(SCORE >= 90) {

      // 학생에게 A를 세팅            

     student = “A”;

    }


    IF조건의 예시를 간단하게 적어보았습니다. 위 예시의 내용은 우선 문자열 학생 변수를 선언하였고, 해당 학생의 스코어가 90점 이상일 경우, A를 주는 내용입니다. 그치만 이정도 가지고는 우리가 해야 할 내용을 완성하지 못합니다.



    IF ~ ELSE 조건


    위의 IF조건 하나만 가지고는 제대로된 값을 세팅할 수 없습니다. 예를 들어, 그외의 모든 것들은 이걸로 세팅해라 라는 말을 IF조건으로 굳이 만들 수는 있지만, 편리하게 else라는 구문을 사용하면 쉽게 사용이 가능합니다. 


    실행 방법

    if(조건문) {

      // 수행할 로직 수행

    } else {

      // if 조건문에 맞지 않으면, 이 로직 수행

    }


    일단, else라는 것을 안쓰고, 90점 이상은 A 마너지를 F를 주는 로직을 만들어보겠습니다.


    string student = "F";   // 미리 F를 지정


    if(SCORE >= 90) {

      student = "A";

    }


    위와 같이 처리를 하여도, 90점 이상은 A 그외에 F를 지정하는 로직이 구현이 됩니다만, 이렇게 간단한 로직만 있는 것은 아니니 else를 활용하여, 구현해보겠습니다.


    string student;


    if(SCORE >= 90) {

       student = "A";

    } else {

      student = "F";

    }


    첫번째, 예제보다 조금 복잡해 보일 수 있습니다. 그래서 이 정도의 로직이라면 첫번째로 구현하는 분들이 많습니다. 오히려 첫번째 예제가 소스 라인이 적어서 더 좋기까지 합니다. 그럼 한번 else가 꼭 필요한 다른 예제를 보도록 하겠습니다. 


    해당 예제는 isMale이라는 bool형의 값이 있고, 펑션을 클릭하면 isMale의 값이 true는 false, false는 true로 변환되는 펑션입니다. 무조건 해당 값을 변환하는 것이기 때문에, 조건문은 2가지가 들어가야 한다는 것을 알 수 있습니다. 


    // 펑션을 클릭하면, 성별을 변환한다

    function changeGender() public {

      // bool형은 isMale은 true일 경우, !isMale은 false일 경우

    if(isMale) {

    isMale = false;

    } else {

    isMale = true;

    }

    }


    물론, if문만 2개를 만들어서 사용하는 방법이 있습니다만, 오히려 가독성이 떨어질 수 있어서, 이럴 경우 else가 더 나을 것입니다. 



    IF ~ ELSE IF ~ ELSE


    IF ~ ELSE 사이에 들어간 ELSE IF는 여러번 호출을 할 수 있는 조건문입니다. IF 조건문이 아닐 경우, 다른 조건문으로 가야 하는데 이럴 때 ELSE IF를 활용하면 쉽게 구현이 가능합니다.



    실행 방법

    if(조건문) {

       // 이 부분의 내용이 실행됨

    } else if(조건문){

       // IF 조건이 아닐 경우, 이 부분을 체크해서 조건이 맞으면 실행됨

    } else {

       // IF와 else IF 모두 아닐 경우 이 부분이 실행됨

    }


    else if는 여러번 넣어서 수행이 가능합니다. 그래서 이 로직을 쓰면, 쉽게 성적별 등급을 구할 수가 있습니다. 우선 else if를 활용한 예제를 보겠습니다.


    function setFruit(uint8 fruitNo) public {

    if(fruitNo == 1) {

    fruit = "apple";

    } else if(fruitNo == 2) {

    fruit = "banana";

    } else if(fruitNo == 3) {

    fruit = "orange";

    } else {

    fruit = "error";

    }

    }


    function getFruit() public constant returns (string) {

    return fruit;

    }


    위 예제는 setFruit에 번호를 입력하면, 번호에 맞는 과일명이 입력이 되며, getFruit을 호출하면 과일명이 호출이 되는 펑션입니다. 위의 예제처럼 else if는 여러번 사용이 가능합니다. 



    문제


    string student 라는 변수에 등급을 부여한다.


    1. setGrade라는 펑션을 설계 하시오.

    => setGrade는 0~100점 사이의 점수값을 입력 받으며, 90점 이상일 경우 A, 80점에서 90점미만일 경우, B를 받으며 나머지는 모두 F 점수를 부여한다.


    2. getGrade라는 펑션을 설계 하시오.

    => getGrade는 student의 등급값을 리턴한다.





    정답


    string student;


    function setGrade(uint8 _score) public {

    if(_score >= 90) {

    student = "A";

    } else if(_score >= 80) {

    student = "B";

    } else {

    student = "F";

    }

    }


    function getGrade() public constant returns (string) {

    return student;

    }



    이상 조건문에 대해서 설명해드렸습니다. 여기서 설명한 조건문은 매우 간단한 조건문이며, 앞으로 좀 더 어려운 조건문들이 나올 예정입니다. 그러한 부분들이 나올때마다 하나하나 빼먹지 말고 알려드리도록 하겠습니다.





    댓글

    Designed by JB FACTORY