개발 보안

상수와 생성자

아엠그라운드 2022. 4. 2. 01:00

상수

C#에서는 const 키워드가 C++와는 약간 다르게 사용된다. C#에서는 이 키워드는 필드 또는 지역 변수의 값을 상수로, 즉 수정할 수 없도록 지정한다. 상수는 일종의 정적 필드이기 때문에 객체 (인스턴스) 당 하나씩 할당되지 않고 클래스 당 하나씩 할당된다. 상수를 참조할 때는 다른 정적 필드와 마찬가지로 클래스명.상수명 형태로 참조한다. , static 키워드는 선언 시 같이 사용할 수 없다. 상수 선언에서는 다음과 같이 여러 개의 상수를 선언할 수 있으며 상수 값 뿐만아니라 수식도 사용할 수 있다.

 

public const int x = 1, y = 2, z = 3;

public const int w = x + 100;

 

생성자

클래스의 생성자는 C++와 동일하게 동작하며 모든 클래스는 최상위 기반클래스인 System.Object 클래스를 상속받는다. 따라서, 어떤 클래스의 객체든 System.Object의 생성자부터 차례로 실행이 되어 해당 클래스의 생성자가 실행이 된다. 클래스에 아무런 생성자도 정의가 되어 있지 않으면 디폴트 생성자 (인수가 없는 생성자)가 생성된다. 그리고 C#에서는 단일 상속만 지원하기 때문에 생성자 초기화 목록에는 아래의 예제처럼 단 1개의 다른 생성자만 올 수 있다.

 

class MyClass : MyBaseClass {

MyClass(int X) : base(X) // MyBaseClass 생성자 수행

{ /* ... */ }

 

MyClass() : this (10) // 인수 하나짜리인 MyClass 생성자 수행

{ /* ... */ }

}

 

C#에는 C++와 마찬가지로 정적 생성자를 제공한다. 정적 생성자는 해당 클래스의 첫 번째 인스턴스가 생성되기 전에 딱 한번 호출되는 생성자로 주로 정적 데이터 멤버 (필드)를 초기화하는데 사용된다. 정적 생성자는 단순히 생성자 앞에 static 키워드를 붙임으로써 선언할 수 있으며 어떤 인자도 받을 수 없다. 참고로, 정적 생성자에 대응하는 정적 소멸자는 따로 없다.