ISSAC.Min

[C++ Basic] 사용자 정의 함수(User Defined Function), 선언(Declare), 정의(Define) 본문

Programming Language/C++ Basic

[C++ Basic] 사용자 정의 함수(User Defined Function), 선언(Declare), 정의(Define)

ISSAC.M 2019. 4. 11. 12:16
반응형

 1. 함수(Function)


함수(Function)이란 어떠한 작업을 수행하기 위해서 설계된 코드들의 집합이라고 말할 수 있다. 특히 이러한 함수는 복잡한 코드들이 자주 사용될때 빛을 바라는데 예시를 들면 <cmath>와 같이 수식들이 포함되어있는 라이브러리 안 함수들이 그러하다. 


1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main() {
    int num1 = 1;
    cout << exp(num1) << endl;                 // 2.71828
    return 0;
}
cs


추가적으로 <cmath> 라이브러리를 따로 설명하겠지만 이번 포스팅에서는 예를 들기위해서만 언급하겠다. 


<cmath>라는 라이브러리에는 우리가 공학계산기에서 사용하는 삼각함수, 지수함수, 무리함수 등을 언제나 쉽게 불러내서 사용하기 위해서 함수화되어 라이브러리에 포함되어있다.


즉, 프로그래밍에서 함수는 어떠한 목적을 띄고 개발자에 의해서 설계된 코드들의 집합이며 반복적으로 불러올 수 있는 특징을 가지고 있다.


 2. 함수의 선언과 정의(Declare, Define)


함수를 사용하기 위해서는 첫번째로 함수를 사용하겠다라는 선언(Declare)을 해주어야 하며 두번째로는 사용할 함수는 어떠한 작동을 할 것이라는 정의(Define)를 해주어야 함수의 사용이 가능하다.


함수의 선언(Declare)이란?

함수를 사용하겠다고 컴파일러에게 먼저 말해주는 행위라고 보면된다. 내가 이 프로그램에서 어떠한 함수를 사용할것이니 미리 컴파일러에게 말해준다고 생각하면 쉽다. 또한 먼저, 미리 알려준다고 했으니 선언은 당연히 함수가 사용되기 이전에 이루어진다. 


함수의 정의(Define)란?

앞에서 말한 어떠한 목적을 명시하는 행위이다. 앞에서 선언을 통하여 함수를 사용할테니까 준비해두라고 컴파일러에게 말해주었는데 만약 함수를 사용할때가 되어서 어떠한 내용도 존재하지 않다면 함수를 사용하는 의미가 없을 것이다. 그러므로 함수의 정의는 우리가 필요로하는 목적을 코딩하는 것을 말한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int myFunction(int x, int y);             // 선언(Declare)
 
using namespace std;
 
int main() {
    int num1 = 2;
    int num2 = 4;
cout << myFunction(num1, num2) << endl;  // 사용(Using)
}
 
int myFunction(int x, int y){             // 정의(Define)
    return x + y;
}
cs


위의 예시는 num1과 num2를 더하는 함수를 선언하고 정의하여 사용을 한 것이다. 사용자에게앞에서 말했듯이 선언(Declare)실행 함수(main function)의 앞 쪽에 위치하게 되고 실행 함수 안에는 사용(Using)을 작성 그리고 마지막 부분에는 정의(Define)를 하게된다. 


정의 부분을 좀 더 자세히 알아보면 

① 반환 자료형 또는 반환 타입을 의미한다.

② 함수의 이름, 식별자를 의미한다.

③ 매개변수 목록을 의미한다.

④ 함수의 목적, 내용이며 함수의 가장 중요한 부분을 차지한다.


여기서 1번에서 지정하는 반환 자료형에 따라 4번에 return이 있을 수도 없을 수도있다. 예를 들어 void 자료형은 반환값을 가지지 않는다. 또한 3번에서 매개 변수의 수는 제한이 없지만 반환값(return value)은 무조건 하나만 가능하다.


반환값은 대부분의 자료형이 모두 가능하지만 배열(Array)는 반환이 불가능하다. 이유는 C++에서는 배열은 자료형으로 보지 않기 때문이다. 하지만 이 배열도 객체(Object)에 포함되어있을 경우 반환값으로 지정이 가능하다. 즉 단일 배열이 불가능 하다는 말이다.


위에서 말한 것처럼 선언과 정의는 순서에 맞게 코딩해야한다. 하지만 추가적으로 순서를 바꿀 수도 있다.


순서가 중요하다면서 그게 무슨말?


선언부분과 정의부분을 보면 위의 반환자료형부터 매개변수 목록까지 형식이 똑같은 걸보면 왠지 그냥 정의를 위해하면 되지않을까? 라는 생각을 가질 수 있다. 결론은 그래도 된다. 함수의 정의를 선언부분에 넣으므로서 함수의 선언과 정의를 같이할 수 있다는 점이다.(물론 사용의 방향은 다르지만 기초적 내용만 다루기때문에)


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int myFunction(int x, int y){                // 정의(Define)
    return x + y;
}
 
using namespace std;
 
int main() {
    int num1 = 2;
    int num2 = 4;
    cout << myFunction(num1, num2) << endl;  // 사용(Using)
}
cs


 3. 실습



반응형