함수란?
함수(function)
- 함수는 특정 작업을 수행하는 명령어들의 모음에 이름을 붙이는 것
- 작업에 데이터를 전달받을 수 있으며, 작업이 완료된 후에는 작업의 결과를 호출자에게 반환한다.
- 함수를 이용하면 여러 번 반복해야 되는 처리 단계를 하나로 모아서 필요할 때 언제든지 호출하여 사용할 수 있다.

함수의 중요성
- 함수(function)는 프로그램을 구성하는 기본적인 구성 요소
- 함수는 한번 만들어지면 다른 프로그램에서도 재사용될 수 있으며 가독성이 증대되고, 유지관리도 쉬워진다.
함수의 종류
- 함수는 컴파일러에서 미리 작성하여서 제공하기도 하고, 프로그래머가 직접 작성할 수 있다.
라이브러리 함수(library function)
- 컴파일러에서 지원되는 함수들을 라이브러리 함수라고 한다.
- 프로그래머가 필요로 하는 다양한 기능을 제공하기 때문에 프로그래머는 보다 쉽게 프로그래밍을 할 수 있다.
- 라이브러리는 수학적인 계산, 문자열 조작, 입/출력 등을 수행하는데 필요한 풍부한 함수를 제공한다.
- 라이브러리 함수를 이용하는 편이 개발 기간을 단축시킨다.
사용자 정의 함수(user-defined function)
- 개발자가 직접 만들어서 사용하는 함수
함수 정의
함수 헤더
- 변환형과 함수 이름, 매개 변수(위의 함수에는 없다)를 합쳐서 함수 헤더라고 한다.
- 중괄호로 둘러싸인 함수 몸체로서 작업에 필요한 문장들이 들어간다.

반환형
- 함수가 처리를 종료한 후에 호출한 곳으로 반환하는 데이터의 유형
함수 이름
- 함수 이름은 식별자에 대한 규칙만 따른다면 어떤 이름이라도 가능하다
- 다만 소스 코드를 읽기 쉽게 하기 위하여 함수의 기능을 암시하는 이름을 부여하는 것이 좋다.
함수 몸체
- 함수 몸체에는 함수가 수행하는 작업에 필요한 문장들이 들어간다
- 함수 몸체에 포함될 수 있는 문장에는 아무런 제한이 없다.
- 함수 내에서도 변수도 정의하여 사용할 수 있으며 모든 제어 구조들도 사용할 수 있다.
- 함수 몸체 안에서 다른 함수들도 호출하는 것이 가능하다.
함수 호출
함수 호출(function call)
- 함수의 이름을 써주는 것
- 함수를 호출하게 되면 현재 실행하고 있는 코드는 잠시 중단되고, 호출된 함수로 이동하여서 함수 몸체 안의 문장들이 순차적으로 실행된다.
- 호출된 함수의 실행이 끝나면 호출한 위치로 되돌아가서 잠시 중단되었던 코드가 실행을 재개한다.


매개 변수와 반환값
- 일반적인 함수를 외부로부터 값들을 전달받는다.
- 처리 결과를 외부로 반환한다.
- 매개 변수와 반환값을 지정하여야 한다.


인수와 매개변수
- 인수와 매개 변수는 함수 호출 시에 데이터를 주고 받기 위하여 필요하다.
인수(argument)
- 호출 프로그램에 의하여 함수에 실제로 전달되는 값
매개 변수(parameter)
- 인수 값을 전달 받는 변수
- 함수를 정의할 때는 각 매개 변수에 대하여 자료형과 이름을 지정하여야 한다.
- 함수가 호출될 때마다 인수는 달라질 수 있다.
- 여기서 주의할 점은 매개 변수의 개수는 정확히 일치하여야 한다
- 인수와 매개 변수의 타입은 서로 일치하여야 한다.
반환값
반환값(return value)
- 함수가 호출한 곳으로 반환하는 작업의 결과값이다.
- 함수는 자신을 호출한 곳으로 값을 반환할 수 있다.
- 값을 변환하려면 return 문장 다음에 수식을 써주면 수식의 값이 변환된다.
- 인수는 여러 개가 있을 수 있으나 반환값은 하나만 가능하다.
- 반환형은 char, int, long, double 등이 될 수 있다.
- 만약 값을 반환하지 않는다면 void라고 표시한다. 만약 변환형을 명시하지 않으면 int형을 가정한다.
- 그러나 특별한 경우가 아니라면 반환형을 생략하면 안된다.
- 반환되는 값이 없다면 return 키워드 다음에 아무것도 써주지 않으면 된다. 또 한 가지 방법은 아예 return 문장을 사용하지 않는 것이다.
함수 원형
- 일반적으로 함수를 사용할 때는 미리 컴파일러에게 함수에 대한 정보를 알려야 한다.
- 따라서 항상 함수를 먼저 정의하고 나중에 사용하는 것이 원칙이지만 이렇게 하지 못하는 경우도 있다. 그런 경우에 함수 원형(function prototype)을 정의해주면 된다.
- 함수 원형은 함수의 이름, 매개변수, 반환형을 함수가 정의되기 전에 미리 알려주는 것이다.
- 함수 원형은 함수 헤더에 세미콜론(;)만을 추가한 것과 똑같다.
- 다만 함수 원형에서는 매개 변수의 이름은 적지 않아도 된다. 매개 변수의 자료형만 적으면 된다.
- 함수 원형을 사용하지 않는 방법은 비교적 단순한 프로그램에서만 가능한 방식으로, 표준적인 방법이 아니다. 따라서 항상 함수 원형을 사용하는 것이 좋다.
함수 원형과 헤더 파일
- 함수 원형들이 많이 정의되는 곳이 헤더 파일이다
- 간단한 경우에는 소스 파일의 시작 부분에 기술하지만 함수의 개수만 많으면 함수 원형을 헤더 파일에 저장하고 헤더 파일을 소스 파일에 포함시키는 것이 일반적이다.
라이브러리 함수(난수)
- 라이브러리 함수는 표준 입출력, 수학 연산, 문자열 처리, 시간 처리, 오류 처리, 데이터 검색과 정렬 이 있다.
- 일반적으로 라이브러리 함수의 원형을 개별적으로 포함하는 것이 아니라 원형이 들어 있는 헤더 파일을 포함시키면 된다.
난수 함수
난수(random number)
- 규칙성이 없이 임의로 생성되는 수이다.
- rand()는 의사 난수(pseudo random number)를 생성하는 함수이다.
- 의사 난수란 다음에 뭔가 나올지 모르는 진짜 난수가 아니라 초기값에 따라서 나오는 순서가 어느 정도 결정되어 있는 난수를 말한다.
- rand()의 원형은 stdlib.h에 정의되어 있다.
- 매번 난수를 다르게 생성하려면 시드(seed)라는 개념을 사용한다.
- 어떠한 값도 시드값이 될 수 있으나 많이 사용하는 겂은 예측이 불가능하면서 상황에 따라 변경되는 값이다. 그래서 많은 사람들이 사용하는 값은 현재 시각이다. 그 이유는 프로그램이 실행되는 시간은 다를 가능성이 많기 때문이다.
- 현재 시각은 보통 time()을 사용한다. 이것을 srand()라는 함수를 이용하여서 시드값으로 설정하면 된다.
라이브러리 함수(수학 함수)
- 수학 함수들에 대한 원형은 헤더파일 math.h에 있다.
- 수학 함수는 일반적으로 double형의 매개 변수와 반환값을 가진다.

floor()와 ceil() 함수
- floor()와 ceil() 함수는 각각 바닥과 천장 함수라고도 한다.
- 실수를 아래 정수 값으로 '밀어 내리거나', 다음 정수 값으로 '밀어서 올린다.'

fabs() 함수
- fabs()는 실수를 받아서 절대값을 반환한다.
pow()와 sqrt() 함수
- pow() 함수는 제곱값을 계산하고 sqrt() 함수는 값의 제곱근을 반환한다.
cos(double x), sin(double x), tan(double x)
- cos(double x), sin(double x), tan(double x) 함수들은 삼각 함수의 값을 계산한다.
라이브러리 함수(기타 함수)

함수를 사용하는 이유
소스 코드의 중복성을 없애준다.
- 가장 중요한 이유는 소스 코드의 중복을 막기 위해서이다.
- 작성된 함수는 여러 번 호출이 가능함으로서 중복을 최소화하여 프로그램을 간결하게 만들 수 있다.
한번 제작된 함수는 다른 프로그램을 제작할 때도 사용이 가능하다
- 소스 코드를 그대로 옮기기만 하면 사용할 수 있다.
복잡한 문제를 단순한 부분으로 분해할 수 있다.
- 함수를 사용하게 되면 개발 과정이 쉬워지고 보다 체계적이 되면서 유지보수도 쉬워진다는 것이다.
- 대규모의 프로그램을 개발하고 유지보수하기 위해서는 전체 프로그램이 하나의 덩어리로 되어 있는 것보다 작은 부분들로 나누어져 있는 것이 더 관리하기가 쉽다. 이것이 모듈(module)이다.
- 각 함수들은 특징적인 한 가지 작업(기능)만을 맡아야 한다.
- 소스 코드의 가독성이 높아진다.
- 함수 이름만 보아도 어떤 작업인지를 대략 알 수가 있어서 소스 코드를 다른 사람이 읽기 쉬워진다.
'CS > C' 카테고리의 다른 글
| 쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터7. 반복문 (0) | 2025.08.06 |
|---|---|
| 쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터6. 조건문 (0) | 2025.07.04 |
| 쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터5. 수식과 연산자 (3) | 2025.07.04 |
| 쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터4. 변수의 자료형 (0) | 2025.05.11 |
| 쉽게 풀어쓴 C 언어 EXPRESS 개정 3판 챕터3. C 프로그램 구성요소 (0) | 2025.05.10 |