#라이브러리 함수
미리 만들어져서 제공되는 함수
printf(), getch() 등이 대표적인 라이브러리 함수이다.
다음은 라이브러리 함수들의 예를 표로 보여준다.
함수 원형 | 헤더 파일 | 용도 및 사용 예 |
iny getch(); | <conio.h> | 키보드에서 하나의 문자를 읽어서 반환함 예)ch = getch(); |
double cos( double x ); |
<math.h> | x에 대한 코사인 값을 계산하여 반환함 예)val = cos(3.14); |
double pow( double x, int y ); |
<math.h> | x의 y승을 계산하여 반환함 예)result = pow(x,10); |
int printf( const char *format [, argument]... ); |
<stdio.h> | "format"에서 지정하는 형태로 화면에 출력함 매개변수는 없을 수도 있고 여러 개일 수도 있음 예)printf("game over!") printf("좌표(%d, %d)",x,y); |
- 라이브러리 함수를 프로그램에서 사용하기 위해서는 그 함수의 정보가 들어있는 헤더 파일을 #include 해줘야 합니다.
- 대부분의 함수는 입력(매개변수)의 개수가 정해져 있습니다. 그렇기 때문에 그 함수의 매개변수의 개수에 맞게 argument를 전해줘야 합니다.
- printf()와 같이 이들 함수는 매개변수가 고정되어 있지 않습니다. 그리고 예외적으로 매우 복잡한 함수이지만
함수는 추상화 덕분에 사용하는 방법만 알면 사용하는데 문제가 없습니다. - 일부 함수는 값을 반환하지 않도록 설계되어있습니다. 예를 들어, 난수 생성기의 시작 값을 설정하는 srand()는 값을
반환하지 않고 그렇기 때문에 반환형이 void입니다.
void srand(unsigned int seed);
printf()와 같이 예외적인 함수를 제외하고는 함수를 사용하는 것은 매우 쉽습니다. 그리고 문제 해결 능력을 위해 사용할 수 있는 라이브러리 함수들을 잘 찾고 활용할 줄 아는 것은 프로그래밍에서 매우 중요한 능력중 하나입니다.
다음은 이미 라이브러리 함수로 구현되어 있을 가능성이 많은 기능들입니다.
- 표준 입출력: 화면 출력, 키보드 입력, 파일 입출력 함수 등
- 수학 연산: 다양한 수학 연산 함수들
- 문자열 처리: 문자열의 길이, 복사, 연결 등 다양한 처리 함수
- 시간 처리: 현재 시각이나 처리 시간을 계산하는 함수
- 오류 처리: 오류 발생 검사 및 대처를 위한 함수들
- 데이터 검색 및 정렬: 배열 등 많은 데이터에서 원하는 것을 찾거나 정렬하는 함수들
#사용자 정의 함수
라이브러리 함수만으로 모든 문제를 해결할 수 있으면 좋겠지만 현실적으로 그럴 수 없기 때문에
프로그래머가 함수를 만들어서 사용해야 합니다.
x의 y승을 구하기 위한 함수를 생각해 봅시다.
물론 <math.h>에 pow()가 정의 되어 있어 이것을 사용하면 되지만, 비교를 위해 보여드리겠습니다.
다음은 라이브러리 pow와 제가 구현한 myPow()를 보여줍니다.
#include <stdio.h>
#include <math.h>
//x의 y승을 매개변수로 받으면 결과값을 전달해주는 사용자 정의 함수
double myPow(double x, int y) {
double result = 1.0;
for (int i = 0; i < y; i++)
{
result = result * x;
}
return result;
}
int main()
{
printf("라이브러리 pow(2.0,5) : %lf\n", pow(2.0, 5));
printf("사용자 정의 함수 myPow(2.0,5) : %lf\n", myPow(2.0, 5));
return 0;
}
함수를 만들 때 설계가 가장 중요하다.
적절한 이름과 함수에 전달할 값과 자료형, 그리고 함수에서 처리가 끝나면,
반환할 값과 자료형을 먼저 고민해서 결정해야 합니다.
함수에서 처리하는 절차, 즉 알고리즘은 그 다음이다.
대부분의 경우 함수 원형의 설계만 잘 하면 이것을 구현하는 것은 어렵지 않기 때문에,
함수를 신중하게 설계하는 습관을 들여야 합니다.
'C++ 프로그래밍 > 함수' 카테고리의 다른 글
C++의 Static을 알아보자 (0) | 2022.07.11 |
---|---|
변수의 가시 범위와 생존기간 (0) | 2022.07.11 |
디폴트 매개변수 (0) | 2022.06.30 |
parameter와 argument 차이점 (0) | 2022.06.24 |
함수란? (0) | 2022.06.24 |