const 키워드는 컴파일 타임 상수를 정의하는 데 사용됩니다. 즉, 프로그램이 컴파일될 때 값이 결정되고, 그 이후에는 절대로 값이 변경되지 않습니다.const 필드는 반드시 초기화와 동시에 값을 설정해야 하며, 이후에는 값을 변경할 수 없습니다.public class Example
{
public const int MyConstant = 10; // 컴파일 타임 상수
}const를 사용할 수 없습니다.using System;
public class ConstSample{
public const int BOY = 9, MAN = BOY + 12;
}
public class ConstTest{
public static void Main{
Console.WriteLine("BOY = " + ConstSample.BOY);//객체를 생성않고 바로 const상수에 접근
Console.WriteLine("MAN =" + ConstSample.MAN);//객체를 생성않고 바로 const상수에 접근
}
}
readonly 키워드는 런타임 상수를 정의하는 데 사용됩니다. 이 값은 객체가 생성되는 시점에서 초기화할 수 있으며, 이후에는 변경할 수 없습니다.readonly 필드는 선언 시 초기화하거나, 생성자(constructor)에서 초기화할 수 있습니다.public class Example
{
public readonly int MyReadOnly;
public Example(int initialValue)
{
MyReadOnly = initialValue; // 생성자에서 초기화 가능
}
}readonly 필드는 런타임에 값이 설정되므로, 객체가 생성될 때마다 다르게 초기화될 수 있습니다.reference types contain a reference to their data, a field that is a
readonlyreference type must always refer to the same object. That object might not be immutable.
참조 유형 가능: readonly 필드는 참조 유형(객체)에 사용할 수 있습니다. 이 경우, 객체 자체는 변경할 수 없지만, 객체의 내부 상태는 변경될 수 있습니다.
readonly필드는 인스턴스 필드이거나 정적 필드일 수 있습니다.- 생성자에서 초기화:
readonly필드는 선언과 동시에 초기화하거나 생성자 내에서 초기화할 수 있습니다.
const vs readonly 차이점| 특성 | const | readonly |
|---|---|---|
| 변경 시점 | 컴파일 타임 | 런타임 (객체 생성 시) |
| 초기화 방법 | 선언 시 리터럴 값으로 초기화 | 선언 시 또는 생성자에서 초기화 |
| 사용 가능한 타입 | 기본 데이터 타입과 문자열만 가능 | 모든 데이터 타입(값 유형, 참조 유형) |
| static 여부 | 암시적 static | 선택적으로 static 가능, 인스턴스별로 다를 수 있음 |
| 변경 가능성 | 컴파일 후 절대 변경 불가 | 객체 생성 후 변경 불가 (생성자에서만 변경 가능) |
| 용도 | 변경되지 않는 고정된 값(수학적 상수 등) | 런타임에 결정되지만 이후 변경되지 않는 값 |