함수 원형
함수 원형 또는 함수 프로토타입, 펑션 프로토타입(function prototype)은 컴퓨터 프로그래밍에서 함수 이름을 지정하는 선언과 형식 시그니처(항수 (수학), 매개변수의 자료형 및 반환형)를 지정하지만, 함수 본문은 생략한다. 함수 정의는 함수가 어떻게 동작하는지("구현")를 지정하는 반면, 함수 원형은 단순히 해당 인터페이스, 즉 어떤 데이터 형식이 들어가고 나오는지 지정한다. "함수 원형"이라는 용어는 특히 C 및 C++ 프로그래밍 언어에서 사용되는데, 전방 선언을 헤더 파일에 배치하여 프로그램을 번역 단위로 분할할 수 있게 한다. 즉, 컴파일러가 개별적으로 오브젝트 파일로 번역하고, 링커에 의해 실행 파일 또는 라이브러리로 결합될 수 있는 부분으로 분할한다. 함수 선언은 함수 정의보다 먼저 나오며, 이름, 반환형, 저장 클래스 및 기타 관련 속성에 대한 세부 정보를 제공한다.[1]
함수 원형은 다음 중 하나의 경우에 사용될 수 있다.[2]
- 외부 유형 정의
- 인터페이스 부분 생성
원형에서 매개변수 이름은 선택 사항이며(C/C++에서는 함수 원형 영역을 가지며, 해당 영역은 원형 끝에서 끝난다), 그러나 형식은 모든 한정자와 함께 필요하다(예: 포인터 또는 const 매개변수에 대한 참조인 경우). 단독 const는 제외한다.
객체 지향 프로그래밍에서 인터페이스와 추상 메서드는 거의 동일한 목적을 수행한다.
예시
[편집]다음 함수 원형을 고려한다.
void sum(int a, int b);
또는, 이름 지정된 매개변수 없이:
void sum(int, int);
또는, 후행 반환형과 함께 (C++ 전용):
auto sum(int, int) -> void;
함수 원형에는 함수 시그니처, 함수 이름, 반환형 및 접근 지정자가 포함된다. 이 경우 함수 이름은 "sum"이다. 함수 시그니처는 매개변수의 수와 해당 유형을 정의한다. 반환형은 "void"이다. 이는 함수가 어떤 값도 반환하지 않을 것임을 의미한다. 첫 번째 예시의 매개변수 이름은 선택 사항이다.
사용법
[편집]C 초기 버전에서는 함수가 이전에 선언되지 않았고 이름이 왼쪽 괄호 뒤에 표현식에 나타나면, int를 반환하는 함수로 암시적으로 선언되었으며 인수에 대해서는 아무것도 가정되지 않았다. 이 경우 컴파일러는 인수의 수와 유형에 대한 컴파일 시간 유효성 검사를 수행할 수 없었다.
C99 표준은 원형 사용을 요구한다.
#include <limits.h>
#include <stdio.h>
// Function prototype
char myFunction(int a);
int main(void) {
putchar(myFunction(-1)); // Correctly formatted call
putchar(myFunction(1.5)); // Compiler warning: type mismatch
putchar(myFunction("IncorrectArgType")); // Compiler warning: type mismatch
putchar(myFunction()); // Compiler error: too few arguments
// Although adding 1 to INT_MAX is an integer overflow error,
// it cannot be detected at compile time
putchar(myFunction(INT_MAX + 1));
return 0;
}
// Function definition
char myFunction(int n) {
if (n > 0) {
return '>';
} else if (n < 0) {
return '<';
} else {
return '=';
}
}
함수 MyFunction은 정수 인수로 호출될 것으로 예상한다. 함수 원형을 포함함으로써, 함수가 하나의 정수 인수를 취함을 컴파일러에 알리고 컴파일러가 잘못 지정된 호출을 잡을 수 있도록 한다.
라이브러리 인터페이스 생성
[편집]헤더 파일에 함수 원형을 배치함으로써 라이브러리에 대한 인터페이스를 지정할 수 있다.
클래스 선언
[편집]C++에서는 함수 원형이 클래스 정의에서도 사용된다.
같이 보기
[편집]각주
[편집]- ↑ TylerMSFT (2023년 1월 25일). “Function Prototypes” (미국 영어). 《learn.microsoft.com》. 2023년 8월 9일에 확인함.
- ↑ “Function prototypes” (미국 영어). 《www.ibm.com》. 2018년 10월 25일. 2023년 8월 9일에 확인함.
- Kernighan, Brian W.; Ritchie Afree, Dennis M. (1988). 《The C Programming Language》 2판. Upper Saddle River, NJ: Prentice Hall PTR. ISBN 0-13-110362-8.