본문으로 바로가기

아두이노 기초 12. 함수

category 아두이노/기초 개념 2016. 11. 29. 19:35



함수


함수는 특정한 작업을 처리하기 위한 프로그램(코드 블록)이다. 프로그램에서 동일하게 반복되는 부분을 독립된 프로그램(코드 블록)으로 한 번만 만들어 두고 필요할 때마다 호출해서 사용한다.

<함수의 개념>


중학교 수학에서 배운 함수의 개념을 그대로 생각하면 된다. 처리할 데이터를 함수통에 넣고 함수통에서는 데이터를 계산(처리)하고 그 결과값을 다시 반환해 주는 원리이다. 이렇게 반복되는 기능들을 모듈화하면 코드가 간결해지며 사람이 알아보기에도 좋다. 특히, 반복되는 작업들을 수정할 일이 생기면 일일히 수정하는 것이 아닌 함수 부분만 수정하면 되므로 유지보수 측면에서도 매우 유용하다.


라이브러리 함수와 사용자 정의 함수


함수는 크게 라이브러리 함수와 사용자 정의 함수로 구분할 수 있다.

라이브러리 함수 : 컴파일러를 만든 곳에서 자체적으로 미리 정의해 둔 함수이다. 아두이노에서는 setup(), loop(), digitalWrite()등이 라이브러리 함수에 속한다. 아두이노 라이브러리 함수는 https://www.arduino.cc/en/Reference/HomePage에서 전체적으로 확인이 가능하다. 라이브러리 함수는 종류가 방대하기 때문에 여기서는 다루지 않고, 예제를 진행하면서 새로운 라이브러리 함수를 사용할 때마다 소개하도록 하겠다.

사용자 정의 함수 : 사용자가 직접 정의하고 호출하는 등 스스로 함수를 제작하여 사용하는 함수를 말한다. 우리는 이 사용자 정의 함수를 어떻게 정의하고 호출하는지에 대해서 알아볼 것이다.


함수의 기본적인 구조


자료형 : 함수를 호출한 곳에 반환할 값의 자료형을 명시해 준다. 반환할 값이 없으면 void형을 사용하고, 반환할 값이 있을 경우 return 뒤에 적은 결과값과 동일한 자료형을 선언 해 준다.

함수명 : 8강에서 배운 변수 선언시 주의사항과 동일하다.

매개변수 : 매개변수, 파라미터 혹은 인자등으로 불리며, 함수의 입력으로 처리 할 데이터를 나타낸다.


함수 호출 사이클


함수를 호출하면 프로그램 사이클이 어떻게 돌아가는지 아는 것이 중요하다. 아래 예제는 함수를 호출하면서 매개변수로 2개의 수를 보내 값을 합하여 출력하는 프로그램이다.

1. 함수 호출. 매개변수로 1과 10을 전달. 이 때 매개변수는 int형이므로 함수부분에서는 int형으로 매개변수를 선언한다.

2. 함수 처리. 1과 10을 더하여 total에 대입한 다음 출력.

3. 함수 종료. return 값이 없으므로 반환 값은 없다.

4. 함수 호출. 매개변수로 2와 7을 전달.

5. 함수 처리.

6. 함수 종료.

함수 호출, 함수 처리, 복귀의 순서만 기억해도 함수의 90%는 이해했다고 볼 수 있다.


함수의 유형


함수는 자료형과 매개변수, 반환 값 유무에 따라 네가지 유형으로 나뉜다.

유형1. 매개변수와 반환값이 모두 없는 경우. 매개변수(x), 반환값(x)

유형2. 매개변수는 있고 반환값이 없는 경우. 매개변수(o), 반환값(x)

유형3. 매개변수는 없고 반환값이 있는 경우. 매개변수(x), 반환값(o)

유형4. 매개변수와 반환값이 모두 있는 경우. 매개변수(o), 반환값(o)


유형1. 매개변수와 반환값이 모두 없는 경우. 매개변수(x), 반환값(x)

매개변수와 반환값이 모두 없는 경우이다. 반환값이 없기 때문에 함수의 자료형은 void로 선언하였다. show()를 3번 호출하였으므로 hello codingrun도 3번 찍어주고 프로그램을 종료한다.


유형2. 매개변수는 있고 반환값이 없는 경우. 매개변수(o), 반환값(x)

위의 사이클 예제가 매개변수는 있고 반환값이 없는 경우이다. 이 역시 값을 반환하지 않기 때문에 함수는 void로 선언한다. 매개변수는 int형을 받아야 하므로 void sum(int a, int b)와 같이 int형으로 매개변수 2개를 선언 해 준다.


유형3. 매개변수는 없고 반환값이 있는 경우. 매개변수(x), 반환값(o)

매개변수는 없고 반환값이 있는 경우이다. 이 때 가장 주의할 점은 반환할 값의 자료형과 동일하게 함수의 자료형을 지정해 줘야한다. 위 예제에서 int a값을 반환하므로 int ban()과 같이 명시했고, 반환된 값을 returnvalue변수에 넣고 출력을 하였다. 


유형4. 매개변수와 반환값이 모두 있는 경우. 매개변수(o), 반환값(o)

유형2번을 조금 바꾼 예제이다. 매개변수와 반환값이 모두 있는 경우이다.

함수를 사용할 때는 필요에 따라서 위 4가지 유형 중 하나를 선택하여 사용하면 된다.


위 유형들을 보면 return의 쓰임새를 짐작할 수 있을 것이다. return은 2가지 용도로 사용할 수 있다.

1. return은 함수를 빠져나갈 때 사용한다. (break와 비슷하다고 생각하면 된다.)

2. return은 값을 반환할 때 사용한다.


기존 기초강의는 배열, 포인터를 포함하여 14강으로 진행될 예정이었으나, 초보자가 이해하기에 어려움이 따르고 예제를 진행하면서 많이 사용하지 않을거라 판단하여 기초강의에서는 제외하기로 결정하였습니다. 추후에 배열과 포인터가 필요할 경우가 생기면 그 때 예제를 통하여 간단하게 소개하거나 번외편으로 강의를 제작하도록하겠습니다.

지금까지 기초강의를 잘 따라왔다면 예제를 진행하는데 어려움이 없을 것이며, 부족한 부분들은 예제를 진행하면서 채워나가도록 하겠습니다.

기초강의를 봐주신 모든 분들께 감사를 표하며 퀄리티있는 예제로 다시 돌아오겠습니다. 감사합니다.