지역 변수(Local Variable)
지역 변수란 선언된 메서드 내부에서만 유효한 범위(scope)를 가지는 변수를 말합니다. 즉, 해당 변수가 선언된 함수나 코드 블록 안에 있는 문장에서만 접근할 수 있으며, 메서드 외부에서는 사용할 수 없습니다.
지역 변수는 메서드가 호출될 때 생성되고, 메서드 실행이 종료되면 소멸하기 때문에 메모리 관리 측면에서도 효율적입니다.
예제
using System;
public class Program {
public static void Main() {
int a; // 지역 변수 선언
a = 100;
Console.WriteLine("Value:" + a);
}
}실행 결과
Value:100
위 예제에서 변수 a는 Main() 메서드 내부에 선언되었기 때문에, Main() 메서드 안에서만 접근 가능한 지역 변수입니다.
전역 변수(Global Variable)
C#은 C++과 달리 전역 변수를 직접 지원하지 않습니다. C++에서 전역 변수에 접근할 때 사용하는 범위 확인 연산자(scope resolution operator, ::)는 C#에서 네임스페이스와 연관되어 있으며, 이를 전역 네임스페이스 별칭(global namespace alias)이라고 부릅니다.
만약 서로 다른 네임스페이스에서 동일한 식별자(identifier)를 가진 타입이 존재한다면, 범위 확인 연산자를 사용해 이들을 구분할 수 있습니다. 예를 들어 System.Console 클래스를 참조하려면 전역 네임스페이스 별칭과 함께 범위 확인 연산자를 아래와 같이 사용합니다.
global::System.Console
예제
using myAlias = System.Collections;
namespace Program {
class Demo {
static void Main() {
myAlias::Hashtable hTable = new myAlias::Hashtable();
hTable.Add("A", "1");
hTable.Add("B", "2");
hTable.Add("C", "3");
foreach (string str in hTable.Keys) {
global::System.Console.WriteLine(str + " " + hTable[str]);
}
}
}
}실행 결과
A 1 B 2 C 3
위 예제에서는 myAlias라는 별칭을 통해 System.Collections 네임스페이스를 참조하고, myAlias::Hashtable 형태로 Hashtable 객체를 생성했습니다. 또한 출력 시 global::System.Console.WriteLine()을 사용하여 전역 네임스페이스를 명확하게 지정했습니다.
전역 변수가 필요하다면?
C#에서 프로그램 전체에서 공유해야 하는 값이 필요하다면, 일반적으로 클래스의 정적 필드(static field)나 정적 속성을 활용하는 것이 권장됩니다. 예를 들어 public static int Counter;처럼 정적 멤버를 선언하면 인스턴스 생성 없이 어디서든 접근할 수 있어 전역 변수와 유사한 역할을 수행합니다.