함수
함수는 어떤 기능을 수행하는 것이다. 수학의 f(x)처럼 x 값을 넘겨주면 내부에서 연산을 거쳐 y값이 나오는 것을 생각해보면 쉽게 이해가 갈 것이다.
함수는 크게 표준함수와 사용자 정의 함수로 구분할 수 있다. 여기서는 사용자 정의 함수에대해 설명하도록 하겠다.
Ex> 자료형 함수이름(매개변수)
{
함수 내부.
}
자료형은 반환할 값의 자료형을 말한다. 함수가 끝나고 반환할 결과 값의 자료형을 말한다.
함수의 이름은 변수와 같이 정의할 함수의 이름이며 이때 이름은 어떤 기능을 하는 함수인지 보고 알 수 있도록 지어주는 것이 좋다.
매개변수는 함수에서 기능을 수행하기 위해 필요로 하는 값을 넘겨줄 때 사용한다. 예를 들어 두 숫자 중에 큰 값을 알려주는 기능을 하는 함수의 경우 비교할 두 숫자를 매개변수로 넘겨주면 함수는 이 두 숫자를 가지고 기능을 수행할 것이다.
함수 내부({}괄호 안)는 함수의 기능을 수행하는 부분이다.
- 소스 코드 예시
int Max(int a, int b)
{
if(a > b) // a가 큰 경우.
{
return a; // a를 반환함.
}
else // b가 큰 경우.
{
return b; // b를 반환함.
}
}
int main()
{
int num1, num2, result;
cout << "첫번째 숫자를 입력하세요 :";
cin >> num1;
cout << "두번째 숫자를 입력하세요 :";
cin >> num2;
1)result = Max(num1, num2);
2)cout << "두 수 중에 " << result << "가 더 큽니다." << endl;
3)// cout << "두 수 중에 " << Max(num1, num2) << "가 더 큽니다." << endl; // 같은 결과를 가진다.
return 0;
}
위에서 예시로 보였던 두 int형 변수를 매개변수로 하고 넘겨받은 두 변수 중에 큰 값을 int형 결과 값으로 반환하는 Max()함수를 정의해보았다. 반환 값을 꼭 변수에 저장해야하는 것은 아니다. 1)번과 2)번을 3)번처럼 써도 같은 결과가 나온다.
만약 매개변수를 잘못해서 많이 쓰거나 적게 쓴다면?
위와 같이 컴파일러가 잘못된 부분을 짚어준다. 정의한 부분과 다르게 사용할 수 없다는 것을 알 수 있다.
위에 소스 코드 예시를 보면 우리가 늘상 사용하던 main()함수보다 위에 먼저 선언을 하고 사용을 하였다. 이것은 무엇을 뜻할까?
우리가 변수를 사용할 때에도 미리 선언을 하고 난 후에 사용을 한다. 이처럼 미리 이러이러한 함수가 있다고 알려주고서 사용을 하는 것이다. 그렇다면 함수를 많이 정의하게 되면 main()함수의 위치는 점점 내려갈텐데? 함수가 많아지면 main()함수를 찾는 것도 일이겠네?
이를 위해서 선언부와 정의부를 나눠서 작성하는 방법이 있다.
-소스 코드 예시
int Max(int a, int b); //선언부.
int main()
{
int num1, num2, result;
cout << "첫번째 숫자를 입력하세요 :";
cin >> num1;
cout << "두번째 숫자를 입력하세요 :";
cin >> num2;
1)result = Max(num1, num2);
2)cout << "두 수 중에 " << result << "가 더 큽니다." << endl;
3)// cout << "두 수 중에 " << Max(num1, num2) << "가 더 큽니다." << endl; // 같은 결과를 가진다.
return 0;
}
int Max(int a, int b) // 정의부.
{
if(a > b) // a가 큰 경우.
{
return a; // a를 반환함.
}
else // b가 큰 경우.
{
return b; // b를 반환함.
}
}
처음에 예시로 보였던 코드를 수정해보았다. 위에 선언부에서는 함수를 사용하는 방식을 미리 알려주는 것이다. 이런 이름의 함수가 있고 매개변수는 어떤 것을 쓰고 반환 값은 어떻다 하고서 말을 해주고 기능에 대한 구현은 밑에서 하는 형식이다. 컴파일과정은 문법의 오류를 찾는 과정이다. 그렇기 때문에 함수의 내부구조가 어떤지 어떤 방식으로 연산을 하는지에는 관심이 없다. 미리 명시만 해주고 명시한대로만 사용하면 문제가 없다는 뜻이다. 그렇다면 위에 선언부가 없어지면 어떻게 될까?
식별자를 찾을 수 없다. 한마디로 이게 뭔지 알 수가 없다는 뜻이다. 위에서부터 읽어내려오는데 Max라는 것에 대해서 들은 바가 없다!라고 하는 말이다.
- 출처 : 열혈강의 C++ 언어본색
혼자 연구하는 C/C++ http://www.soenlab.com/
※ 공부한 내용을 정리하였기때문에 출처와 내용이 다를 수 있습니다.
'Program Languege > C/C++' 카테고리의 다른 글
함수 오버로딩 (0) | 2013.02.27 |
---|---|
Call by (0) | 2013.02.27 |
포인터 변수 - 2 (0) | 2013.02.26 |
C++에서 형변환 종류 (0) | 2013.02.20 |
동적 할당 (0) | 2013.02.17 |