const vs readonly
컴파일타임 상수는 런타임 상수에 비해 다소 빠르지만 유연성이 떨어진다. 컴파일 타임 상수는수행성능이 매우 중요하고 상수값이 절대로 바뀌지 않는 경우에 한해서만사용하는 것이 좋다.
컴 파일 타임 상수는 단지 내장자료형(정수형, 실수형) 이나 enum, string 에 대해서만 사용될수 있다. 이는 내장 자료형만이 유일하게 변수의 초기화 단계에서의 의미를 가지고 문자 자체로 표현되는 값(literal value)을 대체할 수 있기 때문이다.
readonly 대신 const 를 썼을 때의 유일한 장점은 수행성능이다. 이미 알려진 상수값에 직접 접근하는 효율이 readonly로 지정된 변수의 값을 참조하는 것에 비해서 조금 더 빠르다.그렇지만 이를 통해 얻을수 있는 수행성능의 개선효과가 작고 무엇보다 유연성을 감소시키는 단점이 있다. 유연성을 포기하기 이전에 수행성능에 미치는 영향을 먼저 명확하게 하자.
역시 코드를 보는게 이해하기 쉽겠죠 ?? 밑에 내용은 msdn 에 있는 샘플 코드 입니다.
상 수와 읽기 전용 필드의 이진 버전 관리 의미는 다릅니다. 식에서 상수를 참조할 경우 컴파일 타임에 상수 값을 가져오지만, 식에서 읽기 전용 필드를 참조할 경우 런타임까지 필드 값을 가져오지 않습니다. 별개의 두 프로그램으로 구성된 응용 프로그램을 살펴보겠습니다.
using System;
namespace Program1
{
public class Utils
{
public static readonly int X = 1;
}
}
namespace Program2
{
class Test
{
static void Main() {
Console.WriteLine(Program1.Utils.X);
}
}
}
Program1
및 Program2
네임스페이스는 별도로 컴파일된 두 프로그램을 나타냅니다. Program1.Utils.X
를 정적 읽기 전용 필드로 선언했기 때문에 Console.WriteLine
문에서 출력하는 값을 컴파일 타임에 알 수 없으며, 런타임에 해당 값을 가져옵니다. 따라서 X
값이 변경되고 Program1
이 다시 컴파일되면 Program2
가 다시 컴파일되지 않더라도 Console.WriteLine
문이 새 값을 출력합니다. 그러나 X
가 상수였기 때문에 Program2
를 컴파일 할 때 X
값을 가져오며, Program2
를 다시 컴파일할 때까지 Program1
의 변경으로 인해 영향을 받지 않습니다.
여기서 program1 에 x 값은 2로 변경한 값을 유지하고 Program3 을 추가하고 Program2 다음과 같이 변경했다고 가정해봅시다.
namespace Program3
{
public class Utils
{
public const int X = 1;
}
}
namespace Program2
{
class Test
{
static void Main() {
Console.WriteLine(Program1.Utils.X);
Console.WriteLine(Program3.Utils.X);
}
}
}
[출처] C# const vs readonly |작성자 좋은생각
'.NET > C#' 카테고리의 다른 글
ReadLine, Read, ReadKey (0) | 2010.04.03 |
---|---|
어셈블리 동적 로딩 (0) | 2010.03.31 |
Sealed (0) | 2010.03.29 |
Sort메소드 (0) | 2010.03.28 |
Delegate-2 (0) | 2010.03.27 |