코드를 만들 때 통상적으로 사용되는 용어인 함수(Function)에 대해 알아보자.
Microsoft에서 정의한 C language 문서에 따르면 함수(Function)는 C언어의 기본 모듈 단위로, 특정 작업을 수행하도록 설계되며, 선언과 명령문을 포함한다.
즉, 특정한 작업을 위해 설계된 모듈 단위라고 할 수 있다.
함수의 분류로 크게는 컴파일러에서 정의가 되어 있는 Predefined function과 사용자(개발자)가 직접 만드는 User defined function가 있다.
함수 선언은 return type 함수명 (입력 값)으로 되어있다. 만약 선언부와 정의부가 합쳐져 있다면 이 뒤에 {}가 추가되어 기능이 정의된다.
void f1(int a, int b);
int f2(int a) {
return a;
}
return type이 void 일 경우 함수가 끝날때 아무런 반환이 없지만, 다른 type일 경우 반드시 return value가 있어야 한다.
함수의 입력 값은 parameter라고 부르는데 함수의 지역변수로 사용된다. 만약 이 값이 선언되어 있다면 함수를 사용할 때 type이 일치하는 적당한 값을 넣어야 한다.
같은 이름의 parameter가 다른 함수를 여러 개 선언할 수도 있는데, 이를 "오버로딩(overloading)"이라고 한다.
함수는 선언부, 호출부, 정의부로 나뉘어져 있다.
간단한 코드 예시로 살펴보면
int Add(int a, int b); // 선언부
int main() {
int a = Add(1, 2); // 호출부
return 0;
}
텍스트
int Add(int a, int b) { // 정의부
return a + b;
}
위 코드처럼 세 부분으로 나뉘게 된다.
정의부를 main 함수 위쪽에 선언할 경우 선언부 생략이 가능하지만, C++개발에서는 선언부와 정의부로 따로 나누어서 사용한다고 한다.
C++에서 main 함수는 프로그램의 시작 지점(Entry point) 이다.
즉, 운영체제가 프로그램을 실행하면, 내부 준비 과정을 마친 뒤 main 함수를 가장 먼저 호출하게 된다.
앞서 함수를 선언할 때 입력 값을 받을 수 있고, 이것은 Parameter라고 부른다고 했다.
Parameter와 함께 Argument라는 용어가 사용되는데, 이 두 단어는 함수의 입력 값과 밀접한 관련이 있다.
Parameter(매개변수, 인자) : 프로시저를 호출할 때 전달될 값을 나타낸다.
Argument(인수) : 프로시저를 호출할 때 프로시저 매개변수에 전달하는 값을 나타낸다.
전달될 값, 전달하는 값의 차이로 사실 비슷한 말인것 같다.
간단하게 말하면 Parameter(매개변수, 인자)는 함수를 선언할때 입력받는 값을 정의해 놓는 부분을 말하고, Argument는 함수를 호출할 때 Parameter로 정의한 부분에 넣는 값을 말한다. 즉, Parameter는 변수의 틀로 볼수 있고 Argument는 실제 값으로 볼 수 있다.
예시로 알아보면
int f(int a, int b) {
return 0;
}
f(1, 2);
에서 선언부의 (int a, int b)부분은 Parameter 라고 부르고 호출부의 (1, 2)부분은 argument라고 부른다.