Deff_Dev
[Unity/C#] 상수, 열거형, Nullable, var 본문
해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용을 정리한 포스팅입니다.
const
- 상수는 데이터를 초기화할 때 1회 이외에 절대 변경할 수 없는 변수
- 프로젝트의 규모가 커지고 코드가 길어지면 개발자도 사람이기 때문에 해당 변수의 값을 바꾸는 실수를 할 수도 있기 때문에 사용한다.
const int maxHp = 100; // 상수 선언
maxHP = 10; // 상수의 값을 변경하려 하면 에러 발생
const vs readonly
속성 | 쓰기 | 읽기 |
const | 오직 초기화 구문에서만 가능 | static 속성 불가능 (기본적으로 정적 멤버 취급) |
readonly | 초기화 구문, 생성자에서 가능 | non-static : 인스턴스 필드로써 사용 static : 정적 필드로써 사용 |
열거형 (enum)
- 상수를 하나의 그룹으로 묶어 관리한다.
- 코드를 직관적으로 바라볼 수 있어 가독성이 좋다.
- 코드를 확장하거나 제거할 때, 열거형 변수의 상수를 추가하거나 제거함으로써 개발이 편리하다.
// Idle = 0 ~ Hurt = 3의 상수로 저장
// 상수 값을 지정하지 않는다면 첫 번째부터 마지막까지 0~N 순서로 상수 자동 저장
enum PlayerState {Idle, Move, Attack, Hurt}
// 밑 코드 처럼 값을 지정해준다면
// Idle = 0, Move = 5, Attack = 6, Hurt = 7로 상수 저장
enum PlayerState {Idle, Move = 5, Attack, Hurt}
enum PlayerState { Idle, Move = 5, Attack, Hurt}
void Awake()
{
PlayerState ps = PlayerState.Attack;
switch (ps)
{
case PlayerState.Idle:
Debug.Log("플레이어는 가만히 있습니다.");
break;
case PlayerState.Move:
Debug.Log("플레이어는 움직입니다,.");
break;
case PlayerState.Attack:
Debug.Log("플레이어는 공격 중입니다.");
break;
case PlayerState.Hurt:
Debug.Log("플레이어는 공격 받고 있습니다.");
break;
}
// 플레이어는 공격 중입니다. 출력
}
Nullable
- 0이 아닌 비어 있는 변수, null 상태를 가질 수 있는 변수
- int, float을 초기화할 때 null 사용 불가능 (보통 0으로 초기화)
- int, float는 null을 허용하지 않지만 자료형 뒤에 ?를 추가하면 null값을 가질 수 있다.
- 이렇게 선언된 변수는 “변수.HasValue”로 데이터의 유무를 true, false로 반환한다.
int? iValue;
iValue = null;
// HasValue는 데이터가 들어있는지 없는지 검사
// 해당 변수는 null이기 때문에 false 반환
Debug.Log(iValue.HasValue);
// Value는 해당 데이터에 들어있는 값
// null에 접근하기 때문에 InvalidOperationException 오류 발생
// Debug.Log(iValue.Value);
// Debug.Log(iValue);
iValue = 1;
Debug.Log(iValue.HasValue); // true 출력
Debug.Log(iValue.Value); // 1 출력
Debug.Log(iValue); // 1 출력
// 오류 X
Var
- 컴파일러가 자동으로 해당 변수의 형식으로 지정하는 방식
- var 변수 선언과 함께 초기화를 해야된다,
- var 키워드는 지역 변수로만 사용할 수 있다.
var ivalue = 123; // int
var fvalue = 0.1f; // float
var svalue = "안녕하세요."; // string
object와 var의 차이점
- object는 데이터를 박싱해서 힙에 넣어놓고 object 변수가 힙의 주소를 참조한다.
- var은 컴파일 시점에 데이터 형식을 파악하고 해당 형식으로 바꿔서 컴파일한다.
가장 큰 차이점은 컴파일이 완료됐을 때 object 형식은 남아있고 var 형식은 남아있지 않다는 것이다.
(var은 다른 형식(int, float, string ...)으로 변환돼어 컴파일된다.)
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 객체 지향 프로그래밍 (0) | 2024.03.09 |
---|---|
[Unity/C#] 메소드 (0) | 2024.03.08 |
[Unity/C#] 데이터 형 변환 (0) | 2024.03.04 |
[Unity/C#] 변수 (0) | 2024.02.25 |
[Unity/C#] 박싱, 언박싱 (0) | 2024.02.24 |