C 언어에서 전역 변수: 공유 데이터로의 관문

안녕하세요, 야심찬 프로그래머 여러분! 오늘 우리는 C 언어의 전역 변수 세계로 흥미로운 여행을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 기본 개념을 통해 여러분의 프로그래밍 지평을 확장해 드리겠습니다. 그러니 좋아하는 음료를 한 잔 챙기고 편안하게 앉아, 함께 빠져보겠습니다!

C - Global Variables

전역 변수는 무엇인가요?

이제 구체적인 내용으로 들어가기 전에 기본 개념을 알아보겠습니다. 상상해 보세요, 큰 가족 모임을 준비하고 있다면, 모든 사람들이 접근할 수 있는 중요한 정보 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.csharedValue에 접근하고 수정할 수 있습니다.

전역 변수 사용을 피하십시오

이제 여러분이 떠올리는 것처럼, 전역 변수는 정말 놀라운 것처럼 들립니다. 그러나 왜 항상 사용하지 않을까요? 그 이유는 다음과 같습니다:

  1. 코드를 이해하고 유지보수하기 어려워질 수 있습니다.
  2. 잘못된 수정으로 예상치 못한 부작용이 발생할 수 있습니다.
  3. 코드의 재사용성을 저해할 수 있습니다.

대신, 함수에 매개변수로 전달하는 것이 더 나은 방법입니다. 이렇게 하면 코드가 더 모듈화되고 디버깅이 용이합니다.

#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;
}

이 예제에서 num1num2calculateSum() 함수에 매개변수로 전달합니다. 이 방법은 전역 변수를 사용하는 것보다 더 깨끗하고 오류에 강합니다.

결론

이렇게 해서, 여러분은 C 언어의 전역 변수 세계를 여행했습니다. 전역 변수는 강력한 도구일 수 있지만, 절제된 사용이 좋습니다. 프로그래밍 여정을 계속하면서, 언제 사용해야 하고 언제 피해야 하는 감각을 키워 나가세요.

계속 연습하고, 호기심을 가지고, 행복하게 코딩하세요!

방법 설명
선언 함수 외부에서 선언
접근 모든 함수에서 접근 가능
수정 모든 함수에서 수정 가능
범위 프로그램 전체 범위에서 접근 가능
외부 접근 다른 파일의 변수에 extern 키워드 사용
최선의 관행 과도하게 사용하지 않음으로써 잠재적 문제를 피함

Credits: Image by storyset