[C#] 변수 및 상수

Kim Yuhyeon·2022년 3월 28일
0

게임개발

목록 보기
3/135
post-custom-banner

변수

C# 변수는

  • 메서드 안에서 해당 메서드의 로컬변수로 선언되거나
  • 혹은 클래스 안에서 클래스 내의 멤버들이 사용하는 전역적 변수(이를 필드(Field)라고 부름)로 선언될 수 있다.

로컬 변수

  • 해당 메서드내에서만 사용되며, 메서드 호출이 끝나면 소멸된다.
  • 기본값을 할당받지 못하기 때문에 반드시 사용 전에 값을 할당해야 한다.

전역적 변수(필드)

  • 클래스의 객체가 살아있는 한 계속 존속하며 또한 다른 메서드들에서 필드를 참조할 수 있다.
    (주: 만약 필드가 정적 필드(static field)이면 클래스 Type이 처음으로 런타임에 의해 로드될 때 해당 Type 객체(타입 메타정보를 갖는 객체)에 생성되어 프로그램이 종료될 때까지 유지된다).

  • 필드는 값을 할당하지 않으면, 해당 타입의 기본값이 자동으로 할당된다.
    ex. int 타입의 필드인 경우 기본값 0 이 할당된다.

모든 C# 변수의 이름은 대소문자를 구별(case-sensitive)한다. 예를 들어, var1 과 Var1은 서로 다른 변수이다.

예제

using System;

namespace ConsoleApplication1
{
    class CSVar
    {
        //필드 (클래스 내에서 공통적으로 사용되는 전역 변수)
        int globalVar;
        const int MAX = 1024;

        public void Method1()
        {
            // 로컬변수
            int localVar;

            // 아래 할당이 없으면 에러 발생
            localVar = 100;

            Console.WriteLine(globalVar);
            Console.WriteLine(localVar);
        }
    }

    class Program
    {
        // 모든 프로그램에는 Main()이 있어야 함.
        static void Main(string[] args)
        {
            // 테스트
            CSVar obj = new CSVar();
            obj.Method1();
        }
    }
}

필드 globalVar는 값을 명시적으로 할당하지 않은 경우 기본값 0 이 할당된다.
여기서 전역(Global)의 의미는 객체 (혹은 클래스) 내에서의 전역을 의미한다.
지역변수 localVar는 값을 할당하지 않고 사용하게 되면, 컴파일러 에러가 발생한다.


상수

C# 상수는 C# 키워드 const를 사용하여 정의한다.
C# 변수와 비슷하게 선언하는데, 다만 앞에 const를 붙여 상수임을 나타낸다.

const는 필드 선언부에서 사용되거나 메서드 내에서 사용될 수 있으며,
컴파일시 상수값이 결정된다.

예제

using System;

namespace ConsoleApplication1
{
    class CSVar
    {
        // 상수
        const int MAX_VALUE = 1024;

        // readonly 필드 
        readonly int Max;
        public CSVar() 
        {
           Max = 1;
        }
        
        //...
    }
}

C# const 대신 readonly 키워드를 사용하여 읽기전용 (개념적으로 상수와 비슷한) 필드를 만들 수 있다.
readonly는 필드 선언부나 클래스 생성자에서 그 값을 지정할 수 있고, 런타임시 값이 결정된다.

상수와 변수의 차이

변수 : 프로그램 중간에 값을 변경할 수 있다.
상수 : 초기에 정한 값을 중간에 변경할 수 없다.

💡 참고 포스팅

[예제로 배우는 C# 프로그래밍]기초문법 - C# 변수와 상수

post-custom-banner

0개의 댓글