目次
1. extern
이란 무엇인가?
C 언어에서 extern
은 다른 파일에 정의된 변수와 함수를 이용하기 위한 “다른 곳의 것을 빌리는” 신호입니다. 예를 들어, 어떤 파일에서 정의한 전역 변수를 다른 파일에서 사용하고 싶을 때 사용됩니다. 프로그램이 여러 파일로 분할될 경우, 각 파일 간에 데이터를 공유하기 위해 extern
이 활약합니다. 상상해 보세요. 프로그램 안에 방이 많이 있고, extern
은 옆 방에서 도구를 빌려오는 “대여 계약서”와 같은 역할을 합니다. “여기에는 없지만, 옆 방에 있다”는 의미입니다.예시
// file1.c
int g_data = 100;
// file2.c
extern int g_data;
void printData() {
printf("%dn", g_data); // file1.c의 g_data에 접근
}
이 예에서는 g_data
가 file1.c
에서 정의되어 있지만, extern
을 사용함으로써 file2.c
에서 그 변수에 접근하고 있습니다.
2. extern
와 전역 변수의 관계
extern
은 특히 전역 변수와 깊은 관계가 있습니다. 전역 변수는 프로그램 전체에서 한 번 정의되면, 어떤 파일에서든 접근 가능합니다. 하지만, 그대로는 다른 파일이 변수의 위치를 알지 못하므로, extern
을 사용해 “여기에 있어!” 라고 알려줄 필요가 있습니다. 주의점으로는, extern
은 선언에 불과하므로 메모리가 할당되지 않습니다. 변수의 메모리 할당은 원본 파일에서 이루어집니다.전역 변수의 예
// file1.c
int counter = 0;
// file2.c
extern int counter; // 다른 파일에서 정의된 counter를 사용
void incrementCounter() {
counter++; // counter의 값을 업데이트
}
3. 헤더 파일에서 extern
의 사용
대규모 프로젝트가 되면 변수와 함수를 여러 번 선언하는 것이 번거롭습니다. 이때 유용한 것이 “헤더 파일”입니다. 헤더 파일은 다른 파일과 공유하기 위한 정보를 한 곳에 모아두는 파일입니다. 이 헤더 파일에 extern
선언을 모아두면 다른 파일이 동일한 전역 변수와 함수를 참조할 수 있게 됩니다. 헤더 파일은 프로젝트 전체의 “툴박스”라고도 할 수 있습니다. 공통 도구를 한 곳에 모아두고, 필요한 파일에서 그 도구를 사용하는 이미지입니다.헤더 파일의 예
// globals.h
extern int global_variable;
void printGlobalVariable();
// file1.c
#include "globals.h"
int global_variable = 10;
// file2.c
#include "globals.h"
void printGlobalVariable() {
printf("%dn", global_variable);
}

4. 자주 발생하는extern
의 오류
extern
사용법에는 몇 가지 주의점이 있습니다. 예를 들어, extern
으로 선언한 변수에 초기값을 설정할 수 없습니다. extern
은 단순히 ‘선언’일 뿐이며, ‘정의’가 아니기 때문입니다. 또한, 변수 정의가 이루어지지 않은 파일에서 extern
선언을 하면, 링크 오류가 발생합니다.자주 발생하는 오류
extern int data = 100; // 초기화는 NG
위와 같이, extern
과 함께 변수를 초기화하려고 하면 오류가 발생합니다. extern
은 다른 파일에서 정의된 변수를 참조하기 위한 것이며, 변수를 정의하거나 초기화하기 위한 것이 아니기 때문입니다.5. extern
을 사용한 실용적인 사용 예
extern
은 특히 대규모 프로젝트에서 활약합니다. 예를 들어, 여러 모듈에 걸친 프로그램에서는 공통 데이터와 함수를 extern
으로 선언하고 각 파일에서 재사용할 수 있습니다. 이러한 프로젝트에서는 extern
을 사용함으로써 프로그램의 모듈화가 진행되고, 유지보수성 및 가독성이 향상됩니다. 이를 통해 각 파일이 독립적으로 기능하면서도 필요한 데이터를 공유할 수 있게 됩니다.실용적인 예
// main.c
#include "globals.h"
int main() {
printGlobalVariable(); // 다른 파일에서 정의된 함수를 호출
return 0;
}
// globals.c
#include "globals.h"
int global_variable = 100;
void printGlobalVariable() {
printf("%dn", global_variable); // 전역 변수를 출력
}
이 기사에서는 extern
의 기본부터 실용적인 사용법까지 포괄적으로 다루고 있습니다. C 언어에서 프로그램의 분할 및 재사용을 촉진하는 중요한 키워드로서, extern
의 역할을 이해하는 것은 매우 중요합니다.