변수란 값을 저장할 수 있는 메모리 공간 자체 혹은 메모리 공간에 붙은 이름을 의미한다. 변수의 이름을 통해 값의 저장, 변경 및 참조가 가능하다.

변수를 선언하는 방법은 다음과 같다.
Type VarName;
Type VarName = Init_Value;
만약 변수를 선언하고 초기화하지 않으면 아무런 의미가 없는 쓰레기 값이 저장된다.
여기서 초기화(Initialization)란, 변수에 최초의 데이터를 할당하는 것을 의미한다. C/C++ 과 달리 C# 에서는 초기화되지 않은 변수를 사용하면 컴파일러가 에러 메시지를 띄워준다.
int num; // num 이라는 이름의 변수 선언
위의 코드에서 int 와 num 은 다음을 의미한다.
int 정수의 저장이 가능한 메모리 공간을 할당함.num 그 메모리 공간의 이름을 num 이라 함.변수를 선언하고 변수의 이름을 통해 값을 저장하고 참조할 수 있다.
#include <iostream>
int main()
{
int num = 0; // num이라는 이름의 변수 선언 및 0 으로 초기화
num = 10; // 변수 num의 값을 10으로 변경
std::cout << num; // 변수 num의 값 참조
return 0;
}
10
변수의 이름을 지을 때는 몇 가지 규칙이 있다.
_ 로 구성된다.Num 과 변수 num 은 서로 다른 변수이다.)int 7Val; // 오류! 숫자로 시작
int return; // 오류! 이름으로 키워드 사용
int Val!; // 오류! 특수문자 포함
int Val One; // 오류! 이름 사이에 공백
값(Value) 형식은 변수가 값을 담는 데이터 형식을 말한다.
값 형식의 변수는 스택 영역에 저장되며, 코드 블록이 끝나면 스택은 자신이 담고 있던 데이터가 쓰레기가 되지 않도록 모두 수거해 간다.

참조(Reference) 형식은 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식을 말한다.
참조 형식의 변수는 힙과 스택을 함께 이용한다. 힙 영역에는 데이터를 저장하고 스택 영역에는 데이터가 저장된 힙 메모리의 주소를 저장한다.

상수는 변수의 상대적인 개념으로 변경이 불가능한 데이터를 뜻하며 자료형을 근거로 표현된다. 상수는 크게 이름이 있는 상수와 이름이 없는 상수로 나뉜다.
이름이 없는 상수를 가리켜 리터럴 상수 또는 리터럴 이라고 한다.
int num = 20 + 30;
위의 코드는 20 과 30 의 합의 결과를 변수 num 에 저장하는 문장으로 덧셈 연산이 우선으로 진행
되고, 그 결과로 얻어진 값으로 변수 num 을 초기화 한다.
즉, 20 + 30 연산을 CPU 가 진행해야 하며 그러기 위해서는 20 과 30 이 메모리상에 존재해야 한다.

위의 덧셈의 과정을 정리하면 다음과 같다.
20 과 30 이 메모리 공간에 상수의 형태로 저장됨50 이 변수 num 에 저장됨여기서 변수 num 과 달리 상수들은 할당된 메모리 공간에 이름이 없다. 이러한 상수를 가리켜 '리터럴상수', '리터럴' 이라고 한다.
프로그래머는 일상에서와 다름없이 코드에도 10진수를 자주 사용하지만, 경우에 따라서는 2진수와 16진수를 다룰 일도 생긴다.
이때 접두사를 이용할 수 있다.
0b 접두사0x 또는 0X 접두사using System;
namespace IntegralTypes
{
class MainApp
{
static void Main(string[] args)
{
byte a = 240; // 10진수 리터럴
Console.WriteLine($"a = {a}");
byte b = 0b11110000; // 2진수 리터럴
Console.WriteLine($"b = {b}");
byte c = 0XF0; // 16진수 리터럴
Console.WriteLine($"c = {c}");
uint d = 0x1234abcd; // 16진수 리터럴
Console.WriteLine($"d = {d}");
}
}
}
a = 240
b = 240
c = 240
d = 305441741
const 상수const 키워드를 이용해 변수의 값을 프로그래머가 수정하지 못하도록 컴파일러에게 지시할 수 있다.
const 변수는 수정이 불가하므로 선언 시 초기화 해주어야 한다.
const 자료형 상수명 = 값;
using System;
namespace Const
{
class MainApp
{
static void Main(string[] args)
{
const int MAX_INT = 2147483647;
Console.WriteLine($"MAX_INT = {MAX_INT}");
// MAX_INT = 10; // 수정 불가!
}
}
}
MAX_INT = 2147483647
enum열거형을 통해 같은 범주에 속하는 상수를 여러 개 선언할 수 있다.
열거형은 enum 키워드를 사용하여 정의한다. 이때 열거형 상수의 이름만 선언되어 있으면 0 에서
시작하여 1 씩 증가하는 정수값으로 자동으로 설정되며, 중간에 열거형 상수의 값이 선언되지
않으면 앞서 선언된 상수보다 1 이 증가된 값이 할당된다.
using System;
namespace EnumType
{
class MainApp
{
enum DialogResult
{
YES,
NO,
CANCEL,
CONFIRM,
OK
}
static void Main(string[] args)
{
DialogResult result = DialogResult.YES;
Console.WriteLine(result == DialogResult.YES);
Console.WriteLine(result == DialogResult.NO);
Console.WriteLine(result == DialogResult.CANCEL);
Console.WriteLine(result == DialogResult.CONFIRM);
Console.WriteLine(result == DialogResult.OK);
}
}
}
True
False
False
False
False