C++ 프로그래밍/함수

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

같은편 2022. 6. 29. 14:22

#라이브러리 함수

미리 만들어져서 제공되는 함수

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;
}

결과 화면

함수를 만들 때 설계가 가장 중요하다.

적절한 이름과 함수에 전달할 값과 자료형, 그리고 함수에서 처리가 끝나면,
반환할 값과 자료형을 먼저 고민해서 결정해야 합니다.

함수에서 처리하는 절차, 즉 알고리즘은 그 다음이다.

대부분의 경우 함수 원형의 설계만 잘 하면 이것을 구현하는 것은 어렵지 않기 때문에,

함수를 신중하게 설계하는 습관을 들여야 합니다.