전체 코드
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;
}
*/
}
}
}
출처
[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 |