본문 바로가기

C#/기본 문법

C# Nullable(널러블)

 

 

 

 

전체 코드


 

using System;
using System.Reflection;

namespace Rookiss_CSharp
{
    // https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1?srsltid=AfmBOopkXVxKs-MQPYZkTjEYW-yIDMO5xP7l5hQq0hQasUWhobvyKO6N
    // 62강 Nullable(널러블)

    // Nullable -> Null + able
    // Null이 가능한, Null을 만들 수 있는

    class Program
    {
        class Monster
        {
            public int Id { get; set; }
        }

        /*
        static Monster FindMonster(int id)
        {
            // for()
            // return monster;
            return null;
        }
        */

        static int Find()
        {
            return 0; 
        }

        static void Main(string[] args)
        {
            // 기존
            /*
            Monster monster = FindMonster(101);
            if (monster != null) // null : 해당 값의 유무(참조 타입이어서 가능한 것임)
            {

            }
            */

            // Find();
            // Find()의 return 0
            // 0은 없는 값이다 규정을 정하고 사용할 수 밖에 없음
            // 있냐 없냐를 판단할 수 없음
            // 0이 실제 사용하는 값이라면? 0만을 가지고 찾았는지, 못찾았는지 신호가 될 수 없음
            // C# 버전이 올라가서 생긴 문법이 있음 => Nullable
            // Nullable -> Null + able
            int? number = null; // 변수? => Null도 될 수 있다는 의미
            number = 3; // 값 할당이 잘됨

            // int a = number; // error => nullable 형식이랑 int 형식이랑 변환할 수 없음
            int a = number.Value; // .Value를 통해 값을 대입 하면 문제 없음
            Console.WriteLine(a);

            number = null;
            // int b = number.Value; // 에러로 프로그램 뻗음(Nullable은 Value를 가져야 한다는 오류 발생)

            // 대신 Nullable을 사용하면 참조 형식이라서 null인지 아닌지 체크해야 한다는 문제가 있음
            // 2가지 방법 있음 : 직접 null 체크, HasValue 활용
            /*
            if (number != null)
            {
                int b = number.Value;
                Console.WriteLine(b);
            }

            if (number.HasValue)
            {
                int b = number.Value;
                Console.WriteLine(b);
            }
            */

            // Nullable
            // 장점 : null이라는 것을 체크할 수 있어서 좋음

            // 그러나 매번 null 체크하고 .Value로 값을 가져오는 것은 번거로움
            // => 이 부분을 위해 ?? 문법 등장
            // null이 아니라면 number(왼쪽) 값을 뽑아오고, null이라면 0(오른쪽) 값을 대입함
            // 장점 : 번거롭게 직접 null 체크, HasValue 활용하지 않아도 됨
            number = 5;
            int c = number ?? 0; // int c = (number != null) ? number.Value : 0; 구문과 유사함

            Monster monster = null;
            /*
            if (monster != null)
            {
                int monsterId = monster.Id;
            }
            */
            // 대체하여
            // int id = monster?.Id; // error => 변수가 Nullable 타입으로 되어야함(int 값이 들어갈 수 있고, null 값이 들어갈 수 있음)
            int? id = monster?.Id; // monster가 null이 아니라면 monster의 id를 뽑아와 넣어주고, monster가 null이라면 null 값이 들어감
            // 아래 구문 느낌임
            /*
            if (monster == null)
            {
                id = null;
            }
            else
            {
                id = monster.Id;
            }
            */
        }
    }
}

 

 

 

 

 

 

 


 

 

 

출처


https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1?srsltid=AfmBOopkXVxKs-MQPYZkTjEYW-yIDMO5xP7l5hQq0hQasUWhobvyKO6N

 

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문| Rookiss - 인프런 강

현재 평점 4.9점 수강생 6,987명인 강의를 만나보세요. 기초 프로그래밍 지식이 없는 사람들을 위한 C# 프로그래밍 기초 강의입니다. 문법 암기 위주의 수업이 아니라, 최대한 필요한 부분만을 요

www.inflearn.com

62강 Nullable(널러블)

 

'C# > 기본 문법' 카테고리의 다른 글

C# - 콘솔로 구현하는 게임 루프 기초  (1) 2025.12.17
C# Reflection(리플렉션)  (0) 2025.12.14
C# Exception(예외처리)  (0) 2025.12.14
C# lambda(람다)  (0) 2025.12.14
C# Event(이벤트)  (0) 2025.12.14