C 언어에서 전역 변수: 공유 데이터로의 관문
안녕하세요, 야심찬 프로그래머 여러분! 오늘 우리는 C 언어의 전역 변수 세계로 흥미로운 여행을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 기본 개념을 통해 여러분의 프로그래밍 지평을 확장해 드리겠습니다. 그러니 좋아하는 음료를 한 잔 챙기고 편안하게 앉아, 함께 빠져보겠습니다!
전역 변수는 무엇인가요?
이제 구체적인 내용으로 들어가기 전에 기본 개념을 알아보겠습니다. 상상해 보세요, 큰 가족 모임을 준비하고 있다면, 모든 사람들이 접근할 수 있는 중요한 정보 like 장소 주소나 메뉴 같은 것을 알고 싶을 것입니다. 프로그래밍에서 전역 변수는 이와 같은 역할을 합니다 - 프로그램의 다른 부분에서 접근할 수 있는 정보를 제공합니다.
C 언어에서 전역 변수는 어떤 함수 밖에 선언된 변수로, 프로그램의 모든 부분에서 접근할 수 있습니다. 마치 가족 모임에서 모든 사람들이 볼 수 있는 공지板처럼입니다.
전역 변수 선언하기
이제 이 유용한 전역 변수를 어떻게 선언하는지 배워보겠습니다. 생각보다 간단합니다!
#include <stdio.h>
int globalVar = 10; // 이는 전역 변수입니다
void someFunction() {
printf("함수 내에서 전역 변수 값: %d\n", globalVar);
}
int main() {
printf("main 함수 내에서 전역 변수 값: %d\n", globalVar);
someFunction();
return 0;
}
이 예제에서 globalVar
가 우리의 전역 변수입니다. 함수 내부가 아닌 곳에 선언된 것을 주목하세요! 이제 main()
과 someFunction()
모두 접근할 수 있습니다.
C 언어에서 전역 변수 예제
이제 이 개념을 더 잘 이해하기 위해 실질적인 예제를 보겠습니다:
#include <stdio.h>
int totalStudents = 0; // 전역 변수로 학생 총 수를 추적
void addStudent() {
totalStudents++; // 전역 변수를 증가시킵니다
printf("새로운 학생이 추가되었습니다. 총 학생 수: %d\n", totalStudents);
}
void removeStudent() {
if (totalStudents > 0) {
totalStudents--; // 전역 변수를 감소시킵니다
printf("학생이 제거되었습니다. 총 학생 수: %d\n", totalStudents);
} else {
printf("제거할 학생이 없습니다!\n");
}
}
int main() {
printf("초기 학생 수: %d\n", totalStudents);
addStudent();
addStudent();
removeStudent();
return 0;
}
여기서 totalStudents
는 우리의 전역 변수입니다. addStudent()
와 removeStudent()
함수 모두 이를 수정할 수 있으며, main()
함수는 이의 값을 읽을 수 있습니다. 마치 학생 인구를 추적하는 공유 카운터처럼입니다.
전역 변수 접근하기
이전 예제에서 보았듯이, 전역 변수에 접근하는 것은 간단합니다. 다른 변수와 마찬가지로 읽고 쓸 수 있습니다.
#include <stdio.h>
int globalCounter = 0;
void incrementCounter() {
globalCounter++; // 전역 변수에 접근하고 수정합니다
}
int main() {
printf("초기 카운터 값: %d\n", globalCounter);
incrementCounter();
incrementCounter();
printf("최종 카운터 값: %d\n", globalCounter);
return 0;
}
이 예제에서도 main()
과 incrementCounter()
모두 globalCounter
에 접근하고 수정할 수 있습니다.
전역 변수의 범위와 접근성
이제 범위에 대해 이야기해보겠습니다. 프로그래밍에서 범위는 변수가 접근할 수 있는 위치를 의미합니다. 전역 변수는 전역 범위를 가지며, 선언된 후 프로그램의 모든 부분에서 접근할 수 있습니다.
#include <stdio.h>
int globalVar = 5; // 전역 변수
void function1() {
printf("function1 내에서 globalVar = %d\n", globalVar);
}
void function2() {
int globalVar = 10; // 동일한 이름의 지역 변수
printf("function2 내에서 지역 globalVar = %d\n", globalVar);
}
int main() {
printf("함수 호출 전 main 내에서 globalVar = %d\n", globalVar);
function1();
function2();
printf("함수 호출 후 main 내에서 globalVar = %d\n", globalVar);
return 0;
}
이 예제에서 function1()
은 전역 globalVar
를 사용하며, function2()
는 동일한 이름의 지역 변수를 만들어 전역 변수를 일시적으로 가리킵니다.
전역 변수에 extern
키워드를 사용하여 접근하기
때로는 다른 파일에 정의된 전역 변수를 사용하고 싶을 수 있습니다. 이때 extern
키워드가 유용합니다. 프로그램에게 "이 변수는 다른 곳에 정의되었지만, 여기서도 사용하고 싶어"라고 알리는 것입니다!
두 개의 파일이 있다고 가정해 봅시다:
File 1 (globals.c):
int sharedValue = 100;
File 2 (main.c):
#include <stdio.h>
extern int sharedValue; // sharedValue는 다른 곳에 정의되었음을 선언
void printSharedValue() {
printf("공유 값은: %d\n", sharedValue);
}
int main() {
printSharedValue();
sharedValue = 200; // 이를 수정할 수도 있습니다!
printSharedValue();
return 0;
}
extern
을 사용하여 main.c
는 sharedValue
에 접근하고 수정할 수 있습니다.
전역 변수 사용을 피하십시오
이제 여러분이 떠올리는 것처럼, 전역 변수는 정말 놀라운 것처럼 들립니다. 그러나 왜 항상 사용하지 않을까요? 그 이유는 다음과 같습니다:
- 코드를 이해하고 유지보수하기 어려워질 수 있습니다.
- 잘못된 수정으로 예상치 못한 부작용이 발생할 수 있습니다.
- 코드의 재사용성을 저해할 수 있습니다.
대신, 함수에 매개변수로 전달하는 것이 더 나은 방법입니다. 이렇게 하면 코드가 더 모듈화되고 디버깅이 용이합니다.
#include <stdio.h>
int calculateSum(int a, int b) {
return a + b;
}
int main() {
int num1 = 5, num2 = 10;
int result = calculateSum(num1, num2);
printf("합은: %d\n", result);
return 0;
}
이 예제에서 num1
과 num2
를 calculateSum()
함수에 매개변수로 전달합니다. 이 방법은 전역 변수를 사용하는 것보다 더 깨끗하고 오류에 강합니다.
결론
이렇게 해서, 여러분은 C 언어의 전역 변수 세계를 여행했습니다. 전역 변수는 강력한 도구일 수 있지만, 절제된 사용이 좋습니다. 프로그래밍 여정을 계속하면서, 언제 사용해야 하고 언제 피해야 하는 감각을 키워 나가세요.
계속 연습하고, 호기심을 가지고, 행복하게 코딩하세요!
방법 | 설명 |
---|---|
선언 | 함수 외부에서 선언 |
접근 | 모든 함수에서 접근 가능 |
수정 | 모든 함수에서 수정 가능 |
범위 | 프로그램 전체 범위에서 접근 가능 |
외부 접근 | 다른 파일의 변수에 extern 키워드 사용 |
최선의 관행 | 과도하게 사용하지 않음으로써 잠재적 문제를 피함 |
Credits: Image by storyset