C Programming Ch8 : 함수

1. 모듈

모듈(module)

  • 독립되어 있는 프로그램에서 특정한 역할을 담당하는 프로그램의 일부분을 의미한다.

  • 모듈러 프로그래밍 : 모듈 개념을 사용하는 프로그래밍 기법이다.

  • 프로그램을 모듈화하여 작성하면 유지 보수가 쉬워지고, 모듈의 재사용이 가능하며, 다른 모듈과 독립적으로 변경이 가능하다.

  • C에서는 모듈과 함수가 같은 용어로 사용된다.

2. 함수

함수(function)와 함수 호출(function call)

  • 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것이다.

  • 입력을 받아서 특정한 작업을 수행하고 결과를 반환하는 상자와 같다고 할 수 있다.

  • 개발자가 함수의 이름을 호출하여서 작업을 시킬 수 있다.

  • 함수는 작업에 필요한 데이터를 전달받을 수 있으며, 작업이 완료된 후에는 결과를 생성하여 호출자에게 반환한다.

함수가 필요한 이유

  • 여러 번 반복되어야 하는 처리 단계를 하나로 모아서 필요할 때마다 언제든지 호출하여 사용 할 수 있다.


함수의 장점

  • 함수를 사용하면 코드가 중복되는 것을 막을 수 있다.

  • 한번 작성된 함수는 여러 번 재사용할 수 있다.

  • 함수를 사용하면 전체 프로그램을모듈로 나눌 수 있어서 개발 과정이 쉬워지고 보다 체계적으로 되면서 유지보수가 원활하다.

함수의 종류

  • 라이브러리 함수(library function) : 컴파일러에서 기본적으로 지원되는 함수를 의미한다.

  • 사용자 정의 함수(user-defined function) : 개발자가 직접 만들어서 사용하는 함수를 의미한다.

3. 함수의 구조

함수의 구조

  • 함수 헤더(function header)

    • 반환형(return type) : 함수의 처리를 종료한 후에 호출한 곳으로 반환하는 데이터의 유형을 의미한다.

    • 함수 이름(function name) : 함수의 수행목적을 설명하는 동사 또는 동사+명사의 형태로 사용한다.

  • 함수 몸체 (function body) : 함수가 수행하여야 할 작업에 필요한 문장들이 포함되며, 함수 내에서 다른 함수들을 호출하는 것도 가능하다.

함수 호출

  • 특정 함수를 다른 곳(함수 내부, main 함수 내부 등)에서 실행하기 위해 함수의 이름을 직접 작성하여 호출하는 형태를 의미한다.

  • 함수안의 문장들은 호출되기 전까지는 실행되지 않는다.

  • 함수를 호출하면 현재 실행되고 있는 코드는 잠시 중단되고, 호출된 함수로 이동하여서 함수 몸체의 문장들이 순차적으로 실행된다.

  • C언어에서 제일 먼저 호출되는 함수는 main() 이다.

예제 : 함수 호출하기

// func_exam1.c
/* print_stars() 함수를 호출하여 메세지를 출력하는 프로그램 */
#include <stdio.h>

void print_stars()
{
	for (int i = 0; i < 30; i++)
		printf("*");
}
int main(void)
{
	print_stars();
	printf("\nHello World!\n");
	print_stars();
	printf("\n");
	return 0;
}
/*
******************************
Hello World!
******************************
*/

4. 매개변수와 반환값

인수(argument)와 매개변수(parameter)

  • 인수(=실인수, 실매개변수) : 실질적인 값을 부여받은 변수를 의미한다.

  • 매개 변수(=형식인수, 형식 매개변수) : 형식적으로 함수를 구조화시키기 위해 존재하는 변수를 의미한다.

반환값(return value)

  • 호출된 함수가 호출한 곳으로 작업의 결과값을 전달할 때에 전달된 값을 의미한다.

  • 인수는 여러 개가 가능하지만 반환값은 하나의 값만 가능하다.

예제 : 함수의 활용

// add.c
/* 정수의 합을 계산하는 프로그램 */
#include <stdio.h>

int get_integer()
{
	int value;
	printf("정수를 입력하시오: ");
	scanf("%d", &value);
	return value;
}


int add(int x, int y)
{
	return x + y;
}

int main(void)
{
	int x = get_integer();
	int y = get_integer();

	int sum = add(x, y);
	printf("두수의 합은 %d입니다. \n", sum);
	return 0;
}

정수를 입력하시오: 10
정수를 입력하시오: 20
두수의 합은 30입니다.

예제 : 온도변환기

// temperature.c
/* 온도변환을 수행하는 프로그램 */
#include <stdio.h>

void printOptions()
{
	printf(" 'c' 섭씨온도에서 화씨온도로 변환\n");
	printf(" 'f' 화씨온도에서 섭씨온도로 변환\n");
	printf(" 'q' 종료\n");
}
double C2F(double c_temp)
{
	return 9.0 / 5.0 * c_temp + 32;
}

double F2C(double f_temp)
{
	return (f_temp - 32.0) * 5.0 / 9.0;
}

int main(void)
{
	char choice;
	double temp;
	while (1) {
		printOptions();
		printf("메뉴에서 선택하세요.");
		choice = getchar();
		if (choice == 'q') break;
		else if (choice == 'c') {
			printf("섭씨온도: ");
			scanf("%lf", &temp);
			printf("화씨온도: %lf \n", C2F(temp));
		}
		else if (choice == 'f') {
			printf("화씨온도: ");
			scanf("%lf", &temp);
			printf("섭씨온도: %lf \n", F2C(temp));
		}
		getchar();	// 엔터키 문자를 삭제하기 위하여 필요!
	}
	return 0;
}

'c' 섭씨온도에서 화씨온도로 변환
'f' 화씨온도에서 섭씨온도로 변환
'q' 종료
메뉴에서 선택하세요.f
화씨온도: 100
섭씨온도: 37.777778
'c' 섭씨온도에서 화씨온도로 변환
'f' 화씨온도에서 섭씨온도로 변환
'q' 종료
메뉴에서 선택하세요.q

함수 원형(function prototyping)

  • 컴파일러에게 함수에 대하여 미리 알리는 것을 의미한다.

함수 원형과 헤더 파일

  • 일반적으로 헤더 파일에 함수 원형이 선언되어 있다.

5. 라이브러리 함수

라이브러리 함수(library function)

  • 컴파일러에서 제공하는 사전에 작성된 함수

    • 표준 입출력함수
    • 수학 연산함수
    • 문자열 처리함수
    • 오류 처리함수
    • 데이터 정렬 및 검색 함수

수학 라이브러리 함수

함수를 사용하는 이유

  • 소스 코드의 중복을 없애준다.

  • 한번 작성된 함수를 다른 프로그램에서도 사용할 수 있다.(=재사용성 용이)

  • 복잡한 문제를 단순한 부분으로 분해할 수 있다.

예제 : 함수사용의 이유

// get_integer.c
/* 함수사용의 이점을 확인하는 프로그램 */
#include <stdio.h>

int get_integer();
double get_double();
char get_char();

int main(void)
{
	double f, g;
	f = get_double();
	g = get_double();
	printf("실수의 합=%lf\n", f + g);
	return 0;
}

int get_integer() {
	int n;
	printf("정수를 입력하시오: ");
	scanf("%d", &n);
	return n;
}

double get_double()
{
	double n;
	printf("실수를 입력하시오: ");
	scanf("%lf", &n);
	return n;
}

char get_char()
{
	char n;
	printf("문자를 입력하시오: ");
	scanf(" %c", &n);
	return n;
}

실수를 입력하시오: 10
실수를 입력하시오: 20
실수의 합=30.000000

좋은 웹페이지 즐겨찾기