[C언어] 10.함수 이론
C언어 학습 노트 : 10. 함수 이론#
1. 기본 용어#
- Caller (호출자) : 다른 함수를 호출하는 함수.
- Callee (피호출자) : 호출되는 함수.
- 파라미터(매개변수) : 호출자와 피호출자 사이에서 데이터를 전달하는 매개체.
- 임시 결과 : 별도의 저장 공간에 보관하지 않으면 사라지는 계산 결과 값. 즉시 사용하지 않으면 소멸한다.
- 반환 자료형 : 함수가 반환하는 결과 값의 형식.
2. 프로그램의 시작점#
- C 프로그램의 진입점(entry point)은 항상
main()함수이다. - 운영체제 및 런타임 환경이 초기화를 수행한 뒤
main()함수를 호출한다. main()에서 다른 함수를 호출함으로써 프로그램이 전개된다.
3. 함수 설계 원칙#
(1) 무엇을 함수로 만들어야 하는가?#
- UI와 기능을 분리할 것. (관심사의 분리 원칙)
- 하나의 단위 기능으로 규정할 수 있는 대상은 함수로 만들 것.
- 불연속적으로 반복되는 코드, 재사용 가능성이 높은 코드를 함수로 분리할 것.
(2) 코드 분할 시 고려할 요소#
- 함수 이름은 수행 기능을 직관적으로 알 수 있어야 한다.
- 피호출 함수에 반드시 전달해야 할 정보는 매개변수(parameter) 로 확정한다.
- 호출자가 반드시 받아야 하는 정보는 반환 자료형(return type) 으로 확정한다.
4. DRY 원칙 (Don’t Repeat Yourself)#
- 같은 기능을 수행하는 코드를 여러 곳에 중복해서 두지 않는다.
- 중복 코드를 함수로 추출하여 재사용하면 유지보수성과 확장성이 향상된다.
5. 함수 원형 선언과 컴파일#
(1) 함수 원형 (Function Prototype)#
- 함수의 시그니처(signature)를 의미한다.
- 원형 선언은 컴파일러에게 함수의 존재와 인터페이스(반환형, 매개변수)를 알리는 역할을 한다.
- 보통 코드 상단이나 헤더 파일에 작성한다.
(2) 분할 컴파일#
- 코드가 여러 파일로 나뉘어 있을 경우, 각 파일을 별도로 컴파일한 뒤 링커(linker)가 이를 결합하여 실행 파일을 생성한다.
- 원형 선언이 없으면 컴파일러는 함수를 알 수 없어 오류를 발생시킨다.
(3) 헤더 파일#
- 여러 함수 원형 선언을 모아 둔 파일이다.
#include를 통해 다른 소스 파일에서 공유한다.- 코드 재사용성과 유지보수성을 높인다.
6. 변수와 저장 영역#
(1) 전역 변수 (Global Variable)#
- 모든 함수에서 접근 가능한 변수.
- 정적 영역(static storage) 에 저장된다.
- 가급적 사용하지 않는 것이 바람직하다.
- 식별을 위해 이름 앞에
g_접두사를 붙이는 것이 일반적이다.
(2) 지역 변수 (Local Variable)#
- 특정 함수 블록 내에서 선언되어 해당 블록에서만 유효하다.
- 스택(stack) 영역에 저장된다.
- 블록이 끝나면 자동으로 소멸되므로 자동 변수(auto variable) 라고도 부른다.
7. 외부 참조 (extern)#
- 다른 소스 파일에 정의된 변수나 함수를 사용하기 위해
extern키워드를 붙인다. extern은 external linkage를 명시하며, 링커가 다른 파일의 정의를 연결한다.
// file1.c
int g_value = 10;
// file2.c
extern int g_value;
printf("%d\n", g_value); // 다른 파일에 정의된 변수 사용
학습 포인트 정리#
- Caller / Callee 개념은 함수 호출 관계를 명확히 구분한다.
- 함수는 매개변수(입력) → 처리 → 반환 값(출력) 구조를 가진다.
main()은 프로그램의 진입점이며, 운영체제에 의해 호출된다.- 함수 설계는 UI와 기능 분리, 단일 기능 분리, DRY 원칙을 따라야 한다.
- 원형 선언과 헤더 파일은 분할 컴파일과 코드 관리에 필수적이다.
- 전역 변수는 정적 영역에, 지역 변수는 스택 영역에 저장된다.
extern을 통해 외부 파일의 정의를 가져올 수 있다.