Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 전역 변수와 지역 변수 완벽 정리: 스코프 개념부터 global 네임스페이스 별칭까지


지역 변수(Local Variable)

지역 변수란 선언된 메서드 내부에서만 유효한 범위(scope)를 가지는 변수를 말합니다. 즉, 해당 변수가 선언된 함수나 코드 블록 안에 있는 문장에서만 접근할 수 있으며, 메서드 외부에서는 사용할 수 없습니다.

지역 변수는 메서드가 호출될 때 생성되고, 메서드 실행이 종료되면 소멸하기 때문에 메모리 관리 측면에서도 효율적입니다.

예제

using System;
public class Program {
    public static void Main() {
        int a;          // 지역 변수 선언
        a = 100;
        Console.WriteLine("Value:" + a);
    }
}

실행 결과

Value:100

위 예제에서 변수 aMain() 메서드 내부에 선언되었기 때문에, 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;처럼 정적 멤버를 선언하면 인스턴스 생성 없이 어디서든 접근할 수 있어 전역 변수와 유사한 역할을 수행합니다.