본문 바로가기
쿤즈 Dev/C

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

by :)Koon 2020. 9. 25.

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

 

 

이번 포스팅에서는 함수라는 것을 알아볼 예정입니다. 함수는 사실 지금까지도 계속해서 사용하고 있었으며 프로그래밍을 체계적으로 만들어 나가기 위해서는 반드시 사용해야 하는 문법입니다. 그럼 함수(Function) 이 무엇인지 알아보도록 하겠습니다.


함수(Function)란 무엇인가

함수란 '특별한 목정의 작업을 수행하기 위해서 여러 문법, 명령어, 작업들을 모아서 하나의 단어로 표현해 놓은 것'입니다. 모든 함수는 이름 뒤에 괄호()가 등장합니다.

 

여기서 생각해보면 앞선 포스팅들에서 괄호가 있는 문법들을 본적이 있지 않으신가요? 대표적인 main() 도 괄호가 있습니다. main() 도 함수입니다. 그리고 사용했던 표준 입출력 함수도 있죠. 바로 scanf(), printf()입니다. 또 표준 입력 함수에 문제가 있기 때문에 scanf_s() 도 사용했습니다.

 

2020/08/06 - [쿤즈 Dev/C] - [C언어] 표준입력 표준출력 사용하기 (첫 프로그래밍 시작!)

 

[C언어] 표준입력 표준출력 사용하기 (첫 프로그래밍 시작!)

지금까지 C언어를 프로그래밍하기 위해서 여러가지 요소들을 확인해 보았습니다. 키워드와 식별자, 변수와 상수, 데이터 타입까지 이론적인 기초 부분을 알아보았습니다. 앞서 알아본 내용들을

koonsland.tistory.com

이러한 함수들은 미리 정해놓은 명령어와 작업들을 하나의 이름으로 만들어서 미리 정의해 둔 것입니다. 이렇게 미리 정의해두면 사용자(프로그래머)의 입장에서는 굉장히 편리하게 프로그래밍을 할 수 있습니다. 만약 이게 없다면 직접 화면에 출력하거나 키보드로부터 입력받는 과정을 모두 직접 개발해야 하는 것이죠.


함수의 종류

함수에도 종류가 있습니다. 미리 정의해둔 함수인 표준 라이브러리 함수, 그리고 프로그래머가 직접 만들어서 사용하는 사용자 정의 함수입니다.

 

 

표준 라이브러리 함수

표준 라이브러리 함수는 미리 정의가 된 함수입니다. 이러한 함수를 사용하기 위해서는 이 함수가 정의된 소스를 가져와야 합니다. 그 작업이 우리가 프로그래밍에서 가장 처음에 쓰는 #include <stdio.h>입니다. stdio.h 는 헤더 파일(. h)이라고 하며 STanDard Input Ouput의 약자라 생각하시면 됩니다.

 

표준 입력과 출력에 필요한 모든 함수들을 미리 정의해놓고 헤더파일만 include 해주면 편리하게 사용할 수 있습니다. 이러한 헤더 파일은 수학적 정의를 모아놓은 math.h, 수의 변환이나 메모리 프로세스 제어를 모아놓은 stdlib.h 등 여러 가지 매우 다양한 헤더 파일들이 존재합니다.

 

 

사용자 정의 함수

사용자 정의 함수는 프로그래머가 직접 만들어서 사용하는 함수입니다. 반복적으로 사용하는 기능이나 필요한 기능을 직접 만들어서 사용할 수 있습니다. 함수를 만들어서 사용하게 되면 main() 함수 내부가 매우 간결해 지는 현상이 나타납니다. 따라서 프로그래밍 이후에 잘 정돈된 소스들을 볼 수 있으며 플로우를 알 때에도 매우 좋습니다.

 

함수들을 가져다 쓰는 표준 라이브러리 함수들은 이미 사용했고 사용법을 알고 있으니 앞으로는 사용자 정의 함수에 포커싱을 맞추고 진행하겠습니다.


사용자 정의 함수의 형태

사용자 정의 함수는 다음과 같은 형태로 선언하고 정의합니다.

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

함수를 만들고 정의할 때에는 3가지 조건이 필요합니다.

 

returnType 은 반환되는 값을 의미합니다. 함수를 호출해서 내부를 다 실행하고 마지막에 도출된 결과를 외부에 넘겨줄 수 있습니다. 이를 return이라 합니다. 이 return 되는 값들의 종류는 정수형(int), 문자(char), 문자열(array), 실수(float 또는 double) 등 여러 가지가 될 수 있습니다. 따라서 이 형태가 무엇인지 returnType에 정해주는 것입니다.

 

functionName 은 프로그래머가 이 만들어 주는 이름입니다. 아무 이름이나 상관은 없습니다. 다만 함수의 이름은 이 함수가 하는 기능을 이름으로 표현해 주어야 합니다. 나만 사용하는 프로그램이라면 문제가 없지만 서로 협업하여 만드는 프로그램이라면 이름을 잘 지어주는 것이 필요합니다. (사실 이름 만드는 게 가장 힘든 일입니다.)

 

보통 이름은 소문자로만 만들거나 대소문자를 섞어서 만듭니다. 예를 들면 숫자를 가져오는 함수라 하면 가져오다의 get과 숫자의 number를 합쳐서 GetNumber() 혹은 getNumber()라고 만들어 줍니다.

 

parameter는 있을 수도 있고 없을 수도 있습니다. 필수는 아닙니다. 기능에서 필요하면 parameter를 넣어주고 필요하지 않다면 넣지 않습니다. parameter 를 넣어줄 때에는 반드시 자료형과 변수명을 함께 넣어주어야 합니다. 

 

자세한 함수를 만드는 방법은 다음 포스팅에서 해보겠습니다. 여기서는 맛보기로만 만들어 볼게요. 다음 함수는 두 자연수를 parameter로 받아서 합을 구하고 외부에 return 해 주는 함수입니다.

 

functionName : Add

parameter : int num1, int num2

returnType : int

 

위 세 가지를 구성하면 다음과 같이 함수를 만들 수 있습니다.

int Add ( int num1, int num2 ) {

   return num1 + num2;

}

이제 이 함수를 main() 함수에서 사용하려면 Add(3, 5)와 같이 사용해 주면 됩니다. 자세한 내용은 다음 포스팅에서 진행하겠습니다.


오늘은 C언어에서 매우 중요한 함수(Function)라는 것을 알아보았습니다. 함수만 잘 사용해도 굉장히 체계적인 프로그래밍이 됩니다. 함수 중에서도 사용자 정의 함수를 중점적으로 다룰 예정입니다. 왜냐하면 사용자 정의 함수 내에는 표준 라이브러리 함수를 사용하는 일이 많기 때문에 자연스럽게 받아들일 수 있을 것입니다.

댓글