C++의 링크 유형 (Linkage) - 3. External Linkage (외부 링크)
2025. 3. 27. 20:05ㆍ프로그래밍 언어/C++
✅ 3. External Linkage (외부 링크)
🔹 개념 및 특징
External Linkage란,
하나의 식별자(변수 또는 함수)가 여러 번역 단위(소스 파일)에서 동일한 이름으로 참조될 수 있는 링크 특성을 말합니다.
- 다른 소스 파일에서도 접근 가능
- 프로그램 전체에서 하나의 엔티티로 공유
- 전역 변수 및 함수는 기본적으로 external linkage를 가짐
- ODR(One Definition Rule) 준수가 반드시 필요
🔹 적용 대상
- 전역 변수
- 전역 함수
- extern 키워드로 선언된 식별자
- C++17 이후: inline 변수도 External Linkage를 가짐
🔹 extern 키워드의 의미와 사용법
extern은 “정의는 다른 곳에 있다”는 것을 컴파일러에게 알려주는 선언용 키워드입니다.
헤더 파일에는 주로 extern 선언만 작성하고, 실제 정의는 .cpp 파일에 둡니다.
📌 예시:
// common.h
extern int counter; // 선언만 있음
// main.cpp
#include "common.h"
int counter = 0; // 정의 (External Linkage)
🔹 선언과 정의가 분리될 수 있는 이유
C++은 선언(declaration)과 정의(definition)를 분리할 수 있도록 설계되어 있습니다.
이를 통해 헤더 파일은 선언만 포함하고, 실제 메모리 할당은 하나의 소스 파일에서만 수행합니다.
이 구조는 다음과 같은 이점을 가집니다:
- 코드 재사용성 증가
- 인터페이스와 구현 분리
- 컴파일 속도 개선
🔹 다중 파일에서 External Linkage 사용 예
📁 common.h
#ifndef COMMON_H
#define COMMON_H
extern int globalValue; // 선언
void printValue();
#endif
📁 main.cpp
#include "common.h"
int globalValue = 42; // 정의 (External Linkage)
int main() {
printValue();
return 0;
}
📁 util.cpp
#include <iostream>
#include "common.h"
void printValue() {
std::cout << "Value: " << globalValue << std::endl;
}
📌 출력 결과:
Value: 42
🔹 주의할 점: 중복 정의 방지 (Linker Error)
External Linkage를 가진 식별자는 프로그램 전체에서 단 한 번만 정의되어야 합니다.
다중 파일에서 실수로 중복 정의하면 링커(Linker) 에러가 발생합니다.
📌 잘못된 예:
// file1.cpp
int shared = 1;
// file2.cpp
int shared = 2; // ❌ 중복 정의 → "multiple definition of `shared`"
✅ 해결 방법:
// header.h
extern int shared; // 선언만
// file1.cpp
int shared = 1; // 정의는 오직 한 곳만!
이렇게 External Linkage는 다중 파일 간 공유를 가능하게 하며, 프로젝트 구조화와 모듈화의 핵심 개념입니다.
하지만 반드시 ODR 준수와 정의의 단일성을 기억해야 합니다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++의 링크 유형 (Linkage) - 5. No Linkage (링크 없음) (0) | 2025.03.27 |
---|---|
C++의 링크 유형 (Linkage) - 4. Internal Linkage (내부 링크) (0) | 2025.03.27 |
C++의 링크 유형 (Linkage) - 2. C++에서의 링키지 종류 (0) | 2025.03.27 |
C++의 링크 유형 (Linkage) - 1. 링키지(Linkage)란? (0) | 2025.03.27 |
C++ inline - 요약 (0) | 2025.03.27 |