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는 필드 선언부나 클래스 생성자에서 그 값을 지정할 수 있고, 런타임시 값이 결정된다.
변수
: 프로그램 중간에 값을 변경할 수 있다.
상수
: 초기에 정한 값을 중간에 변경할 수 없다.