나만의 작은 도서관

[C#] 문법 정리 #9. Nullable, enum, var 본문

Unity/문법 및 메소드(System)

[C#] 문법 정리 #9. Nullable, enum, var

pledge24 2024. 11. 23. 02:36

Nullable 타입

C#에서 기본 값 타입(int, float, bool 등)은 null 값을 허용하지 않는다. 그렇기 때문에 null 대신 "값이 없음"을 표현하기 위해 -1과 같은 값을 넣기도 하지만 Nullable 기능을 이용하면 기본 값 타입에도 null값을 할당할 수 있다.

 

사용법 및 예제

Nullable의 형식은 ? 연산자를 사용하여 선언한다. 예를 들어, int?는 int형에 null을 할당할 수 있는 Nullable<int> 형식을 의미한다. 

int? nullableInt = null;
if (nullableInt.HasValue)	// HasValue: 값이 있는지 여부를 반환 (true/false).
{
    Console.WriteLine($"Value: {nullableInt.Value}");	// Value: 실제 값을 반환 (없으면 예외 발생).
}
else
{
    Console.WriteLine("Value is null");
}

 

Nullable 타입의 사용 목적

  • 데이터베이스와 같은 시스템에서 필드가 null일 수 있는 경우 처리.
  • 값 타입에서 초기값이 불분명하거나 선택적 상태를 표현해야 할 때 사용.

Enum (열거형)

enum은 연관된 상수(Constant)들에 이름을 부여하고 집합으로 정의한 자료형이다. enum 사용 시 코드의 가독성과 유지보수를 향상된다. 기본적으로 enum은 정수형을 기반으로 하며, 각 요소는 정수 값과 대응된다.

 

선언부 예제

열거형 값은 기본값(0)에서 시작하지만 명시적으로 값을 지정할 수 있다.

enum Days
{
    Sunday,    // 0
    Monday,    // 1
    Tuesday,   // 2
    Wednesday, // 3
    Thursday,  // 4
    Friday,    // 5
    Saturday   // 6
}

// 명시적 지정
enum HttpStatus
{
    OK = 200,
    NotFound = 404,
    InternalServerError = 500
}

 

출력 예제

Days today = Days.Wednesday;
Console.WriteLine($"Today is: {today}"); // 출력: Today is: Wednesday
Console.WriteLine((int)today);          // 출력: 3

// 열거열 형변환
string dayString = Days.Friday.ToString(); // Enum -> string
Days parsedDay = (Days)Enum.Parse(typeof(Days), "Friday"); // string -> Enum

int intValue = (int)today;  // Enum -> int
Days enumValue = (Days)intValue;  // int -> Enum

 

주의 사항

enum의 선언문은 클래스 외부 또는 클래스 내부의 전역 범위에서만 선언할 수 있으며, 메서드 내부에서는 선언할 수 없다. enum은 데이터 타입의 정의이기 때문에 프로그램 실행 중에 변경되거나 생성될 수 없으며, 컴파일 타임에 고정되어야 한다.

public class MyClass
{
    public void Method()
    {
    	enum MyEnum { A, B, C, D} // 이렇게 하면 에러 발생
        MyEnum myEnum = MyEnum.A;    
    }
}

매직 타입 var

var는 C#에서 컴파일 시점에 타입을 추론하는 키워드이다. 변수 선언 시 명시적으로 타입을 지정하지 않고 초기화된 값으로 타입이 결정된다. var은 제너릭이나 익명 타입처럼 복잡한 타입을 저장할 때 유용하게 쓰일 수 있지만, 해당 타입이 어떤 타입인지 알기 어렵다는 점에서 코드 가독성을 저하시킬 수 있다.

 

주의 사항

반드시 초기화가 되어있어야 하며, 한 번 추론된 타입은 변경되지 않는다.

var x; // 오류 1(초기화 안됨)

var number = 10;
number = "Text"; // 오류 2(한 번 추론된 타입은 변경 X)

 

 

사용법 및 예제

var number = 10;            // 컴파일러는 int로 추론
var message = "Hello, C#";  // 컴파일러는 string으로 추론
var numbers = new int[] {1, 2, 3}; // 컴파일러는 int[]로 추론