const vs readonly

  • const는 상수로 초기화 1회를 제외한 모든 경우에서 값을 변경할 수 없다.

프로그램에서 변경하면 안되는 값을 미리 예방할 수 있다.

const int Max = 500;
  • readonly는 초기화 구문, 생성자에서 설정이 가능하지만 마찬가지로 이후에 값을 수정할 수 없다.
readonly int Max = 500;

좀 더 자세하게 다루자면 const의 경우 컴파일 타입의 상수로 스택영역에 할당된다.(static선언 시 힙영역에 할당)

따라서 접근이 빠르다는 장점이 있지만 해당 값이 변경되는 경우 해당값의 영향을 받는 모든 프로젝트를 다시 컴파일해야한다는 단점이 존재한다.

이에 반해서 readonly의 경우 런타임 상수이기 때문에 힙영역에 할당되고 생성자단계에서 1회 할당 후 변경이 불가능하다.

생성자를 통해서 초기화가 가능하가 때문에 사용단계에서 값을 가져올 수 있다.

사용성면에서는 readonly가 좀 더 좋다.

물론 프로그램의 설계에 맞게 사용자가 적절하게 사용하는 것이 가장 중요..!

enum

열거형이라고 부른다.

한마디로 설명하자면 상수를 하나의 그룹으로 묶어서 관리하는 자료형이다.

enum PlayerState
{
    Idle, // 0
    Move, // 1
    Attack // 2
}

위와 같이 사용하는 경우가 많으며 기반자료형을 지정하여 사용가능하다. (생략 시 int)

enum PlayerState : int

위와 같이 생성한 경우 차례대로 0, 1, 2의 정수값으로 초기화 된다.

그냥 정수로 사용하면 되는거 아닌가..? 라는 생각이들 수 있지만 코딩 시 숫자의 형태보다 위와 같이 플레이어의 상태를 관리하는 문자열 형태로 관리하는 것이 좀더 가독성과 유지보수에 유리하다.

enum PlayerState
{
    Idle = 10 // 10
    Move, // 11
    Attack // 12
}
  • 만약 값을 할당한 경우 뒤로 붙는 열거자들은 전부 1씩 플러스되게 된다.

Nullable

0이 아닌 null의 상태를 가질 수 있는 변수

int? temp = null;

?를 데이터타입 뒤에 붙여서 선언하며 해당 변수는 null의 상태를 가질 수 있는 변수가 된다.

temp.HasValue;
temp.Value;

값이 존재하는지 HasValue로 확인하며 반환값은 ture, false로 반환되며 Value의 경우 값을 반환한다.

var

약한 형식검사를 지원하는 방식으로 유용하게 사용할 수 있는 자료형이다.

주로 foreach문에서 자주 사용하는데 해당 자료형을 유주하여 변수의 타입을 알아서 지정해준다.

var temp = 10; //int형식 할당

위와 같이 사용하며 지역변수로만 사용 가능하다.

댓글남기기