변수의 범위(scope)

Shy·2025년 3월 12일

C#

목록 보기
12/27

C#에서 변수의 범위(Scope)란 변수가 어디에서 선언되고, 어디까지 접근할 수 있는지 결정하는 개념이다.

변수의 범위(Scope)란?

변수의 범위는 해당 변수를 사용할 수 있는 코드 영역을 의미한다.
C#에서는 변수가 선언된 위치에 따라 범위(Scope)가 결정된다.


C#에서 변수의 범위 종류

범위(Scope)설명선언 위치
블록 범위(Block Scope)중괄호 {} 내부에서만 접근 가능if, for, while 등
지역 변수(Local Variable)특정 메서드 안에서만 접근 가능메서드 내부
필드(Field, 멤버 변수)클래스 내부에서 접근 가능 (접근제어자에 따라 달라짐)클래스 내부
정적 변수(Static Variable)클래스 전체에서 공유됨static 키워드 사용
전역 변수(Global Variable)프로그램 전체에서 접근 가능 (C#에서는 사용하지 않음)C#에서는 지원 X

블록 범위(Block Scope)

블록 {} 내부에서 선언된 변수는 해당 블록 내부에서만 사용 가능하며, 블록을 벗어나면 변수를 사용할 수 없다.

if (true)
{
    int x = 10; // x는 if 블록 내부에서만 사용 가능
    Console.WriteLine(x); // ✅ 출력 가능
}
Console.WriteLine(x); // ❌ 오류! (x는 블록을 벗어나면 사용 불가능)

변수 xif 블록 내부에서 선언되었기 때문에 블록 밖에서는 접근할 수 없다.


지역 변수(Local Variable)

  • 메서드 내부에서 선언된 변수는 해당 메서드 내에서만 접근 가능하다.
  • 다른 메서드에서는 같은 이름의 변수를 독립적으로 사용할 수 있다.
class Program
{
    static void PrintMessage()
    {
        string message = "Hello"; // 지역 변수
        Console.WriteLine(message);
    }

    static void Main()
    {
        string message = "Hi"; // 다른 지역 변수 (독립적)
        Console.WriteLine(message);

        PrintMessage(); // "Hello" 출력
    }
}
// message 변수는 Main()과 PrintMessage()에서 각각 독립적으로 선언된다.
// PrintMessage()의 message는 Main()에서 사용할 수 없다.

필드 (Field, 멤버 변수)

  • 클래스 내부에서 선언된 변수는 필드(Field) 또는 멤버 변수(Member Variable) 라고 한다.
  • 필드는 클래스 내 모든 메서드에서 접근 가능하지만, 접근제어자(public, private 등) 에 따라 외부 접근이 제한될 수 있다.
class Person
{
    private string name; // 필드 (private → 클래스 내부에서만 사용 가능)

    public void SetName(string newName)
    {
        name = newName; // 클래스 내부에서는 사용 가능
    }

    public void PrintName()
    {
        Console.WriteLine(name);
    }
}

class Program
{
    static void Main()
    {
        Person p = new Person();
        // p.name = "Alice"; // ❌ 오류! (private 필드이므로 접근 불가능)
        
        p.SetName("Alice");
        p.PrintName(); // ✅ "Alice" 출력
    }
}
  • 필드 name은 private이라 Person 클래스 내부에서만 접근 가능.
  • 메서드를 통해 name을 변경하고 출력할 수 있음.

정적 변수(Static Variable)

  • static 키워드가 붙은 변수는 클래스 전체에서 공유된다.
  • 객체를 생성하지 않아도 접근 가능하다.
  • 모든 인스턴스가 같은 값을 공유한다.
class Counter
{
    public static int count = 0; // 정적 변수

    public Counter()
    {
        count++; // 모든 객체가 같은 count를 공유
    }
}

class Program
{
    static void Main()
    {
        Counter c1 = new Counter();
        Counter c2 = new Counter();
        
        Console.WriteLine(Counter.count); // 출력: 2
    }
}
  • 정적 변수 count는 모든 Counter객체가 공유한다.
  • 객체를 두 개 생성했기 때문에 count값은 2가 된다.

전역 변수(Global Variable)

  • C#에서는 전역 변수를 직접 지원하지 않는다.
  • 대신 정적 변수(static field)나 싱글톤 패턴을 사용하여 전역 변수처럼 사용할 수 있다.
class GlobalData
{
    public static int globalValue = 100;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(GlobalData.globalValue); // 100 출력
    }
}
// 전역 변수를 직접 지원하지 않지만, static 필드를 이용하여 비슷한 효과를 낼 수 있다.

결론

범위(Scope)설명선언 위치접근 가능 범위
블록 범위 (Block Scope){} 내부에서만 사용 가능if, for, while 등해당 블록 내부
지역 변수 (Local Variable)특정 메서드 안에서만 사용 가능메서드 내부메서드 내부
필드 (Field, 멤버 변수)클래스 내부에서 접근 가능 (접근제어자 적용)클래스 내부클래스 내부
정적 변수 (Static Variable)모든 객체가 공유하는 변수static 키워드 사용클래스 전체
전역 변수 (Global Variable)프로그램 전체에서 사용 가능 (C#에서는 static으로 대체)static 필드 사용모든 클래스
profile
신입사원...

0개의 댓글