본문 바로가기
쿤즈 Dev/C

[C언어] 함수(Function) (2) 사용자 정의 함수의 사용법

by :)Koon 2020. 9. 28.

지난 포스팅에서는 C언어에서 굉장히 중요한 함수(Function)라는 것을 올려드렸습니다. 표준 라이브러리 함수들은 프로그래밍에서 필수적으로 사용할 수 밖에 없는 함수들이며 기본적으로 정의된 라이브러리들을 사용할 수 있는 함수들입니다. 그리고 꼭 필수는 아니지만 체계적인 프로그래밍을 위해서 사용해야 하는것이 바로 사용자 정의 함수 입니다.

 

 

오늘 포스팅에서는 사용자 정의 함수에 대해서 조금 더 자세하게 알아보고 만드는 방법과 사용법에 대해서 자세히 다뤄보도록 하겠습니다.


사용자 정의 함수란 무엇인가

사용자 정의 함수는 이름 그대로 사용자(프로그래머)가 직접 함수를 만들고 사용하는 것을 의미합니다. 

 

2020/09/25 - [쿤즈 Dev/C] - [C언어] 함수(Function) (1) 함수의 의미와 종류

 

[C언어] 함수(Function) (1) 함수의 의미와 종류

앞선 포스팅들에서 기본적인 변수와 상수의 사용법, 표준 입출력, 연산자를 알아보았고 반복문과 조건문을 사용해서 프로그래밍을 해보았습니다. 지금까지는 C언어를 사용하면서, 혹은 다른 언

koonsland.tistory.com

사용자 정의 함수는 다음과 같은 규칙을 가지고 만들어야 한다고 이전 포스팅에서 말씀드렸습니다.

returnType  functionName ( [parameter, ...] ) {
   ...
}

그럼 이러한 함수의 형태에 맞게 프로그래밍을 만들어 보면서 설명드리도록 하겠습니다.


처음에 만들어볼 프로그래밍은 계산기를 만들어볼 예정입니다. 기본적인 함수를 만들어 뼈대를 세울 예정입니다.

 

소스코드1 calculation.c

#include <stdio.h>

int Add(int, int); // 함수 선언

int main(int argc, const char* argv[]) {
    int n1 = 5;
    int n2 = 3;
    int sum = 0;

    sum = Add(n1, n2); // 함수 사용

    printf("sum = %d\n", sum);

    return 0;
}

// 함수 정의
int Add(int num1, int num2) {
    return num1 + num2;
}

소스코드에서 가장 상단에 앞서 말씀드린 함수의 형태를 미리 선언해 두었습니다. 함수의 내부는 없으며 return type, 함수이름, parameter만을 선언해 두고 이에 대한 정의는 main 함수 하단에 본체를 만들어 두었습니다.

 

main 함수에서는 Add(n1, n2) 라는 형태로 함수를 사용해 주면 됩니다. 이 함수의 argument로 5, 3을 넣어주고 결과적으로 이둘의 합인 8을 return type 으로 받는 것입니다. 그래서 이 값을 받을 변수 sum 의 자료형도 int 입니다.

 

 

여기서 Tip!

위 프로그래밍에서 가장 먼저 알아야 할 부분은 함수의 선언과 정의부분입니다. 선언은 이 함수의 이름과 기본 뼈대를 정해서 main함수를 실행하기전에 만든 함수가 있다고 알려주는 부분입니다.  이때 함수를 선언과 동시에 정의까지 해줘도 프로그램적으로 전혀 문제가 되지 않습니다.

 

예를들어서 함수 선언부분에 함수 정의를 써주셔도 됩니다. 그런데 이렇게 여러가지 사용자 정의함수를 만들게 되면 main 함수가 가장 아래 있게 되는 형태가 만들어집니다. 이것도 프로그래밍이 스타일이 때문에 문제가 되지 않습니다. 다만 저의 경우는 선언부를 가장 상단에 올려두고 정의는 따로 하단에 빼줍니다. 그래야 어떤 함수들을 만들어 놓았고 사용하는지 확인 바로 가능합니다.

 

또한 실제 필드에서는 사용자 정의함수들은 미리 다른 header 파일로 빼놓고 .c 파일로 만들어 놓은 상황에서 가져와서 사용하는경우가 대부분입니다. 이 부분도 추후 따로 말씀드리도록 하겠습니다.

 

그럼 이제 나머지 부분도 만들어 보겠습니다. 계산기를 컨셉으로 뼈대를 구성하기 것이기 때문에 나머지 사칙연산을 만들어 볼께요.


소스코드2 calculation2.c

#include <stdio.h>

int Add(int, int);
int Sub(int, int);
int Mul(int, int);
int Div(int, int);

int main(int argc, const char* argv[]) {
    int n1 = 10;
    int n2 = 2;
    int sum = 0, sub = 0, mul = 0, div = 0;

    sum = Add(n1, n2); // 함수 사용
    sub = Sub(n1, n2);
    mul = Mul(n1, n2);
    div = Div(n1, n2);

    printf("sum = %d\n", sum);
    printf("sub = %d\n", sub);
    printf("mul = %d\n", mul);
    printf("div = %d\n", div);

    return 0;
}

// 함수 정의
int Add(int num1, int num2) {
    return num1 + num2;
}

int Sub(int num1, int num2) {
    return num1 - num2;
}

int Mul(int num1, int num2) {
    return num1 * num2;
}

int Div(int num1, int num2) {
    return num1 / num2;
}

각각의 덧셈, 뺄셈, 곱셈, 나눗셈의 사용자 정의 함수를 선언하고 하단에 정의해서 만들어 보았습니다. 이제 main() 함수 내부에서 이 함수들을 각각 불러서(call) 사용하시면 됩니다.

 

이때 나눗셈 함수 Div 는 정수만을 return 합니다. 만약에 10 / 4 의 값이 들어온다면 2라는 결과가 return 되게 됩니다. 이를 소숫점까지 return 하고 싶다면 returnType 을 float 또는 double 로 바꿔서 함수를 만들어 주시면 됩니다.


오늘은 함수의 두 번째인 사용자 정의 함수에 대해서 조금 더 자세하게 알아보았습니다. 함수는 반 필수적인 선택사항입니다. main() 함수 내부에 모든 소슬을 다 넣어도 되지만 유지보수하는 측면에서는 굉장히 불편한 점이 많습니다. 따라서 함수를 사용하여 조금 더 체계적인 프로그램과 유지보수의 측명에 도움이 되는 프로그래밍을 하는 것을 추천드립니다.

댓글