Deff_Dev

[Unity/C#] 상수, 열거형, Nullable, var 본문

Unity(유니티)/유니티 공부

[Unity/C#] 상수, 열거형, Nullable, var

Deff_a 2024. 3. 4. 19:10

해당 포스팅은 고박사님의 유니티 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