C#/문법 정리
C# - 상수(const)와 readonly
Khadra
2024. 7. 14. 08:44
상수(const)
- 변하지 않는 값이다.
- 예를 들어, 길이를 나타내는 단위 중에 미터와 야드가 있다.
1미터는 1.09361 야드이다. 이 값은 변하지 않으므로 상수이다. - const 키워드로 선언된 상수를 바꾸려고 컴파일 시 에러가 나온다.
즉, 프로그래머가 실수로라도 바꾸지 못하게 한다. - 예시
const double meterToYard = 1.09361;
readonly
- C#에는 "읽기전용"이라는 뜻이다.
- readonly 키워드를 붙인 변수는 변수를 선언하는 시점과 생성자 메소드에서만 값을 변경할 수 있다.
- 그 외의 경우에 변경하면 오류가 발생한다.
const와 readonly의 차이점
const | readonly |
---|---|
선언될 때 값이 할당된다. | 실행될 때 또는 객체가 생성자에 의해 초기화될 때 값이 할당된다. |
"Classname.VariableName"으로 사용해야 한다. | "InstanceName.VariableName"으로 사용해야 된다. |
컴파일 시에 값이 결정된다. | 런타임 시에 값이 결정된다. |
예제 코드
using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
// ConstEx 클래스의 정의이다.
class ConstEx
{
// const int number를 선언하고 3을 할당한다. 이후에는 number의 값을 변경할 수 없다.
public const int number = 3;
}
// ReadOnlyEx 클래스의 정의이다.
class ReadOnlyEx
{
// readonly int number를 선언하고 10으로 할당한다.
public readonly int number = 10;
// 생성자가 2개 중복되어 있다.
// 매개변수 없는 ReadOnlyEx() 생성자는
public ReadOnlyEx()
{
// number값을 20으로 할당한다.
number = 20;
}
// int 매개변수를 갖는 ReadOnlyEx(int n) 생성자는
public ReadOnlyEx(int n)
{
// number값을 n으로 할당한다.
number = n;
}
}
class Program
{
static void Main(string[] args)
{
// const를 사용한 number값을 출력한다.
// ConstEx.number와 같이 "클래스이름.변수명"을 사용한다.
// 3이 출력된다.
WriteLine(ConstEx.number);
// ReadOnlyEx의 인스턴스 inst1을 생성한다.
// new ReadOnlyEx()를 사용하였으므로
// 매개변수 없는 ReadOnlyEx() 생성자가 실행되며,
// number값은 20으로 할당된다.
ReadOnlyEx inst1 = new ReadOnlyEx();
// inst1.number를 출력하면 20이 출력된다.
// const와 달리 readonly 변수는 "인스턴스명.변수명"을 사용한다.
WriteLine(inst1.number);
// ReadOnlyEx의 인스턴스 inst2을 생성한다.
// new ReadOnlyEx(100)를 사용하였으므로
// 매개변수로 int를 갖는 ReadOnlyEx(int n) 생성자가 실행되며,
// number값은 100으로 할당된다.
ReadOnlyEx inst2 = new ReadOnlyEx(100);
// inst2.number를 출력하면 100이 출력된다.
WriteLine(inst2.number);
}
}
}
결과
3
20
100