일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- primitive notion
- It
- C
- 공리
- Proposition
- language
- Mathmetics
- Developer
- Programming
- Engineer
- 코딩
- 증명
- computer
- C언어
- coding
- 개발자
- 컴공
- Binary
- 구조체
- structure
- 이진수
- 프로그래밍
- c++
- Axiom
- University
- 정리
- Engineering
- 문법
- proof
- Syntax
- Today
- Total
Study Note
[C/C++ Syntax] #010 함수(Function) 본문

프로그래밍은 단순히 코드를 작성하여 프로그램을 만드는 것에서 멈추지 않고 이후 사용하면서 생기는 문제들을 해결하는 유지보수의 과정이 있습니다. 즉, 작성했던 코드를 다시 봐야할 일이 생기는 것이죠. 뿐만아니라 팀 단위 프로젝트에서의 협업의 과정에서도 다른 사람의 코드를 읽어야 할 경우도 있습니다. 이렇게 코드를 읽는 일은 빈번하게 발생합니다. 그래서 코딩 과정에서 코드를 읽기 쉬운 형태로 작성하는 것은 매우 중요한 일입니다.
따라서 이번 글에서는 이를 위한 구성요소인 함수(function)에 대해 알아보도록 하겠습니다.
함수란?

procedure 혹은 subroutine이라고도 불리는 함수는 특정 기능을 하는 문장들을 키워드로 치환하여 미리 정의해 둔 뒤, 이후 해당 기능이 사용될 때마다 문장들이 아닌 키워드를 사용하는 형식의 모듈(module)로, 입력에 대한 결과 반환 기능이 있습니다. 함수를 사용하면 문장들이 어떤 기능을 하는지 분석할 필요도 없고, 재사용이 가능하여 같은 기능의 문장들의 반복을 피할 수 있습니다. 즉, 함수를 사용하는 사람의 입장에서 해당 함수의 사용구조와 기능만 파악한다면 복잡한 코드의 개입 없이 쉬운 코딩이 가능하다는 것이죠.
함수는 크게 두 가지로 분류됩니다. 누군가 만들어놓은 함수들인 라이브러리 함수(library function)와 코딩 주체가 직접 만들어 사용하는 사용자 정의 함수(user defined function)가 있습니다.라이브러리 함수는 이전에 사용한 printf(), scanf_s() 등이 해당되며 내부에 어떤 문장들로 구성되었는지 알지 못하지만 사용구조와 기능을 파악하고 있었기 때문에 자유롭게 사용이 가능했습니다.사용자 정의 함수는 직접 함수 내부 문장을 작성하는 함수 정의 단계가 추가된 것으로 관련 용어에 헷갈리지 않도록 주의하여야 합니다.
함수 정의 (Function definition)
함수를 직접 설계하는 단계를 함수 정의라고 합니다. 그 방법은 다음과 같습니다.

초록색에 해당하는 부분은 함수 헤더(function header)라 불리는 부분입니다.
함수 이름(function name)은 식별자 규칙(#003에서 소개)에 따라 작성되며 함수 이름만으로도 어느정도 그 기능을 유추할 수 있도록 작성하는 것이 일반적입니다.
매개 변수(parameter)는 함수를 호출할 때 입력값(인수)을 저장하는 변수로 함수 종료 시 소멸되며, 0개 이상의 매개 변수를 사용할 수 있습니다. 매개 변수를 작성할 때, 자료형도 함께 적어주어야 합니다.
반환형(return type)은 함수의 결과값을 반환할 때, 반환될 데이터의 자료형으로 반환값이 없는 경우 void를 적습니다. 반환은 최대 1개까지만 가능합니다.
중괄호로 묶인 구성 문장들을 통틀어 함수 몸체(function body)라 부릅니다. 함수의 기능을 직접적으로 구현하는 부분입니다. 함수의 반환 데이터는 return 키워드 직후에 오는 데이터이며 반환이 없는 경우, return 이후에 반환 값을 적지 않거나 return 문장 자체를 적지 않습니다. return 문장의 실행이 완료되면 함수는 종료되므로 함수의 마지막을 알리는 마침표와 같은 역할입니다.
함수 호출(Function call)
함수 호출은 함수를 직접적으로 사용하는 단계로 다음과 같이 함수 이름 뒤에 소괄호와 그 안에 인수를 적는 구조입니다. (세미 콜론 주의)

인수(argument)는 매개 변수에 저장할 값으로, 함수 정의 단계에서의 매개변수의 개수와 각 자료형이 동일해야 합니다. 수식에서 계산이 완료되면 수식값으로 치환되듯이 함수도 호출이 완료되면 해당 문장은 반환값으로 치환됩니다.
예제로 서로 다른 두 개의 정수를 전달 받아 더 큰 값을 반환하는 함수를 정의하고 이를 이용하여 서로 다른 네 개의 정수 중 가장 큰 값을 출력하는 프로그램을 작성해보겠습니다.
#include <iostream>
using namespace std;
int bigger(int x, int y) {
if (x > y)
return x;
else
return y;
}
int main() {
int a, b, c, d;
cout << "네 정수를 입력하시오. : ";
cin >> a >> b >> c >> d;
cout << bigger(bigger(a, b), bigger(c, d)) << endl;
}

함수 원형(Function prototype)
위의 예제와 같이 main을 제외한 모든 함수는 main함수 이전에 작성하여 컴파일러에게 일종의 선언이 되어있어야 합니다. 하지만 위와 같이 작성하면 정의하는 함수가 많아지고 함수 몸체가 길어질수록 다시 코드가 복잡해지는 문제를 초래합니다. 따라서 main함수 이전에 함수 원형을 적어 선언만 해두고 이후에 다시 함수를 정의하여 코드를 간결하게 할 수 있습니다.
함수 원형에서 매개변수는 이름을 생략하고 자료형만 적을 수 있고 이후 정의 부분에서 매개변수의 이름을 반드시 작성해주어야 합니다.
함수 원형은 함수 정의에서 헤드 부분만을 적고 세미콜론으로 마무리 하는 방식으로 사용합니다. 함수 원형을 사용하여 위 예제를 다시 작성하면 다음과 같습니다.
#include <iostream>
using namespace std;
int bigger(int, int); // prototype
int main() {
int a, b, c, d;
cout << "네 정수를 입력하시오. : ";
cin >> a >> b >> c >> d;
cout << bigger(bigger(a, b), bigger(c, d)) << endl;
}
int bigger(int x, int y) {
if (x > y)
return x;
else
return y;
}
'- 프로그래밍 언어(Programming Language) > C\C++' 카테고리의 다른 글
[C/C++ Syntax] #012 포인터(Pointer) (0) | 2021.01.16 |
---|---|
[C/C++ Syntax] #011 변수의 속성(Attribute of variable) (0) | 2021.01.11 |
[C/C++ Syntax] #009 반복문(Repetitive statement) (0) | 2021.01.08 |
[C/C++ Syntax] #008 조건문(Conditional statement) (0) | 2021.01.06 |
[C/C++ Syntax] #007 입출력(Input & Output) (0) | 2021.01.05 |