- const는 컴파일 상수이다. 적용이 컴파일 시에 이루어진다.
- readonly는 런타임 상수이다. 적용이 런타임에 이루어진다.
이 차이를 알아보기 위해서 다음과 같은 시도를 해보았다.
1. 다음과 같은 두 상수가 정의된 클래스 라이브러리 ConstantTestLib를 만들고 dll파일 제작
[code language=”csharp”]
namespace ConstantTestLib{
class MyConstant{
public const int CONST_MAX = 2500;
public static readonly int RDONLY_MAX = 1500;
}
}
[/code]
2. 다음과 같은 콘솔 프로그램을 만듦
[code language=”csharp”]
using System;
using ConstantTestLib;
namespace Test{
class Program{
public static void Main(string[] args){
Console.WriteLine("Const Max : "
+ MyConstant.CONST_MAX);
Console.WriteLine("Readonly Max : "
+ MyConstant.RDONLY_MAX);
}
}
}
[/code]
3. 2의 프로그램을 실행시켜보니 2500, 1500이 출력되었다.
4. 1의 라이브러리만 수정(CONST_MAX = 3000, RDONLY_MAX = 2000)하고 다시 빌드하고, 결과물인 dll만 바꿔치기한 후 2의 프로그램을 다시 실행해보니 2500, 2000이 출력되었다.
이는 const가 붙은 상수의 경우 컴파일 시에 치환되는 것을 뜻한다. 그러므로 라이브러리의 CONST_MAX를 수정해도 프로그램 자체를 다시 빌드하지 않는 이상은 계속 같은 값이 출력된다.
그러나 readonly의 경우에는 런타임 시에 치환되므로 라이브러리에서 바뀌었다면, 프로그램을 다시 빌드하지 않아도 바뀐 RDONLY_MAX를 가져다 쓰는 것이다.
const는 주로 ‘이후에 바뀔 가능성이 없는 상수’에 쓰이고, readonly는 그 이외에 쓰는 것이 좋다고 한다.
답글 남기기