언어 자료구조 알고리즘/C# 언어 문법

4. const 와 readonly

언제나휴일 2009. 8. 19. 05:47
반응형
const 와 readonly

 

 

다루는 내용

   -const

   -readonly

   -static 생성자

 

 먼저 데모를 작성하기 위해 데모 클래스를 하나 만들어 보자.

 

테스트 클래스를 하나 추가한다.

 

 

const 키워드

const 키워드는 System네임스페이스에 있는 기본 형식에 대해서만 사용할 수 있는 키워드 입니다.  다른 형식과 같이 사용할 때는 null로 설정해야 하기 때문에 무용지물이다.

 

System  네임 스페이스 내의 기본 형식
C# 형식 .NET Framework 형식
bool System.Boolean
byte System.Byte
sbyte System.SByte
char System.Char
decimal System.Decimal
double System.Double
float System.Single
int System.Int32
uint System.UInt32
long System.Int64
ulong System.UInt64
object System.Object
short System.Int16
ushort System.UInt16
string System.String

 

const는 C++과 달리 컴파일러에 의해 IL코드로 변환할 때 리터럴로 코드를 생성한다.

이 말은 런타임에 상수에 연결된 주소가 없다는 말입니다. 

주소가 없다는 것은 대입 연산의 l-value로 사용할 수 없고 이후에 나올 레퍼런스로 전달될 수도 없음을 의미한다.

제일 중요한 것은 주소가 없기 때문에 인스턴스의 필드가 될 수 없고 static 키워드가 붙은 멤버처럼 클래스의 멤버로 취급한다.

당연히 static 키워드와 const 키워드는 같이 사용할 수가 없다

 

인스턴스의 멤버가 아니기 때문에 클래스명을 통해 const멤버에 접근할 수가 있다. 

 

Look & Feel & Think  

const 키워드가 붙은 멤버는 인스턴스의 멤버가 아니라 클래스의 멤버이다.  즉, 클래스명을 통해 접근이 가능하다. 

 

 

 

 

readonly 

인스턴스의 멤버를 상수화 하고 싶다면 즉, 런타임에 상수값을 초기화하여 이후 변경하지 않는 인스턴스의 멤버 필드를 만들기 위해서는 readonly 키워드를 사용하면 된다. 

인스턴스의 멤버 필드라는 얘기는 할당이 된다는 얘기이고 클래스나, 구조체 등에도 readonly 키워드를 사용할 수 있다는 얘기가 된다.

 

C#에서는 readonly멤버의 설정은 생성자에서 가능하다. 

 

또한, 모든 멤버 필드에 대해 선언과 동시에 초기화가 가능하다. 

 

readonly로 선언된 멤버 필드는 읽기 전용 필드로 생성자와 선언부 외에서는 값을 변경할 수 없다. 

 

readonly 키워드가 붙으면 인스턴스의 멤버 필드이다. 

 

 

인스턴스의 멤버이기 때문에 클래스명을 통해 접근할 수가 없다.

여기서는 러 메시지에 나오는 정적 필드, 메소드 또는 속성을 합쳐서 인스턴스의 멤버라고 부르고 있다. 

 

 

Look & Feel & Think  

readonly 키워드가 붙으면 런타임에 인스턴스 생성시에 초기화가 이루어 지며 인스턴스의 멤버 필드이다.

 

 

 

static 생성자

readonly 키워드가 붙은 멤버 필드는 인스턴스의 멤버 필드이기 때문에 static 키워드를 붙여 클래스의 멤버 필드로 작성할 수도 있다.

 

static readonly 멤버 필드는 선언문에서 초기화를 하거나 static 생성자에서 할 수가 있다.  static 생성자는 액세스 권한을 명시할 수 없으며 C# 사용자에 의해 호출하는 생성자가 아니다.

 

static readonly 멤버 필드가 const 멤버와 다른 점이 static 생성자에서 값을 설정할 수 있다는 것인데 가령 설정 파일등에 있는 값으로 설정하는 것은 const 키워드가 붙은 상수로는 불가능하지만 readonly  키워드가 붙은 읽기 전용 필로로는 가능하다.

 

본 예에서는 const 키워드가 붙은 상수는 경성 제한 값으로 설정하고 static 과 readonly 키워드가 붙은  읽기 전용 멤버 필드는 연성제한 값으로 설정파일에서 얻어오는 것 대신 Random값으로 하고 있다.  여러분은 설정 파일에서 얻어온다고 가정해 주길 바란다. 

 

이렇게 설정하면 MAX_NUM(경성제한) >= max_num(연성제한) >= 인스턴스의 번호와 같은 형태가 될 수 있다.

 

사용 예로 학생 번호를 크게 주고 있다. 

 

결과는 보는 것과 같이 default값으로 설정 됨을 알 수 있다. 

 

 

Look & Feel & Think  

static 키워드와 readonly 키워드가 붙은 읽기 전용 필드는 static 생성자를 통해 초기화가 가능하다. 

static 생성자는 액세스 권한을 설정할 수 없다. 

 

 

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
9.String  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19
6. valuetype 기본 형식  (0) 2009.08.19
5. .NET Framework  (0) 2009.08.19
3. 소멸자  (0) 2009.08.19
2. 생성자  (0) 2009.08.19
1.Welcome! Here is ehclub.net  (0) 2009.08.19