C# - Nullables
안녕하세요, 야심찬 프로그래머 여러분! 오늘 우리는 C#에서의 Nullables이라는 흥미로운 세계로 뛰어들어 보겠습니다. 프로그래밍 초보자라고 걱정하지 마세요 - 나는 이 개념을 단계별로 안내해 드릴 것입니다. 수년간 많은 학생들을 가르친 경험을 바탕으로 말입니다. 이 흥미로운 여정을 함께 시작해 보겠습니다!
Nullables는 무엇인가요?
생각해 보세요. 양식을 작성할 때 중간 이름 필드가 있다고 가정해 봅시다. 하지만 중간 이름이 없다면 어떻게 될까요? 현실 세계에서는 그냥 공백으로 두시죠. C#에서도 이와 유사한 개념이 있습니다. 바로 Nullables입니다.
Nullables은 C#의 특별한 기능으로, 값을 가지는 타입(예: int, double, bool)이 추가적인 상태인 null을 가질 수 있게 해줍니다. 일반적으로 값 타입은 null이 될 수 없지만, Nullables은 이러한 유연성을 제공합니다.
기본 문법
Nullables 타입을 선언할 때는 타입 이름 뒤에 ?
기호를 사용합니다. 다음은 예제입니다:
int? nullableInt = null;
double? nullableDouble = 3.14;
bool? nullableBool = true;
이 코드에서:
-
nullableInt
는 null이 될 수 있는 정수이며, 우리는 그것을 null로 설정했습니다. -
nullableDouble
는 null이 될 수 있는 더블이지만, 우리는 그것에 값을 부여했습니다. -
nullableBool
는 null이 될 수 있는 불리언이며, 우리는 그것을 true로 설정했습니다.
null 확인
Nullables을 사용할 때는 사용하기 전에 값이 있는지 확인하는 것이 중요합니다. 이를 HasValue
프로퍼티를 사용하여 할 수 있습니다:
int? maybeNumber = null;
if (maybeNumber.HasValue)
{
Console.WriteLine($"The value is: {maybeNumber.Value}");
}
else
{
Console.WriteLine("The value is null");
}
이 코드는 maybeNumber
에 값이 있는지 확인합니다. 값이 있다면 값을 인쇄하고, 그렇지 않으면 null이라고 출력합니다.
Nullables 값 사용
Nullables의 값을 사용하려면 Value
프로퍼티에 접근할 수 있습니다. 하지만 주의해야 합니다! null인 Nullables의 Value
에 접근하려고 하면 예외가 발생합니다. 다음은 안전한 방법입니다:
int? possibleAge = 25;
int actualAge = possibleAge ?? 0;
Console.WriteLine($"Age: {actualAge}");
이 예제에서, possibleAge
가 null이면 actualAge
는 0이 됩니다. 이제 다음 주제로 넘어가겠습니다...
null 결합 연산자 (??)
null 결합 연산자 (??)는 잠재적인 null 값을 다루는 데 도움을 주는 친절한 지킴이입니다. 이 연산자는 "null이 아니면 이 값을 사용하고, 그렇지 않으면 이 대체 값을 사용하라"는 의미의 약자입니다.
기본 사용법
null 결합 연산자를 사용하는 방법은 다음과 같습니다:
string name = null;
string displayName = name ?? "Guest";
Console.WriteLine($"Welcome, {displayName}!");
이 코드에서, name
이 null이면 (그렇다면) displayName
은 "Guest"로 설정됩니다. 이는 기본 값을 제공하는 간결한 방법입니다.
null 결합 연산자 연결
여러 개의 ?? 연산자를 연결하여 여러 잠재적 값을 확인할 수 있습니다:
string firstName = null;
string middleName = null;
string lastName = "Smith";
string fullName = firstName ?? middleName ?? lastName ?? "Unknown";
Console.WriteLine($"Full name: {fullName}");
이 코드는 첫 번째 비-null 값을 사용하거나, 모두 null이면 "Unknown"을 사용합니다.
메서드 호출과 null 결합 연산자
?? 연산자는 메서드 호출에도 사용할 수 있습니다:
public string GetUserName()
{
// 이 메서드는 null을 반환할 수 있습니다.
return null;
}
string userName = GetUserName() ?? "DefaultUser";
Console.WriteLine($"User: {userName}");
이는 메서드가 null을 반환할 수 있는 경우에 매우 유용합니다.
실제 예제
Nullables과 null 결합 연산자가 유용한 실제 상황을 몇 가지 살펴보겠습니다:
예제 1: 사용자 입력
Console.Write("Enter your age (or press Enter to skip): ");
string input = Console.ReadLine();
int? age = string.IsNullOrEmpty(input) ? null : int.Parse(input);
string message = age.HasValue
? $"You are {age.Value} years old."
: "Age not provided.";
Console.WriteLine(message);
이 코드는 사용자가 나이를 입력하거나 건너뛰는 선택을 할 수 있게 합니다. 우리는 Nullable int를 사용하여 나이가 제공되었는지 여부를 나타냅니다.
예제 2: 데이터베이스 쿼리
사용자 정보를 데이터베이스에서 조회하는 상황을 상상해 봅시다:
public class User
{
public string Name { get; set; }
public int? Age { get; set; }
}
User user = GetUserFromDatabase(); // 이 메서드가 존재한다고 가정합니다.
string ageDisplay = user.Age.HasValue
? $"{user.Age.Value} years old"
: "Age unknown";
Console.WriteLine($"User: {user.Name ?? "Anonymous"}, {ageDisplay}");
이 예제에서 우리는 사용자의 나이가 데이터베이스에 없을 수 있음을 Nullables을 사용하여 처리하고, null 결합 연산자를 사용하여 기본 이름을 제공합니다.
결론
Nullables과 null 결합 연산자는 C#에서 더 강력하고 유연한 코드를 작성하는 데 도움이 되는 강력한 도구입니다. 이들은 데이터가 누락될 수 있는 상황을 처리하여 우리의 프로그램을 더 견고하고 사용자 친화적으로 만듭니다.
기억하세요, 프로그래밍은 요리와 같아요 - 연습이 필요합니다. 이 개념들을 자신의 프로젝트에서 실험해 보지 마세요. 얼마 지나지 않아 Nullables과 ?? 연산자를 마스터하실 것입니다!
계속 코딩하고, 학습하고, 프로그래밍 여정에서 즐거움을 느껴보세요!
메서드/연산자 | 설명 | 예제 |
---|---|---|
? (Nullable type declaration) |
값을 가지는 타입을 nullable로 선언 | int? nullableInt = null; |
HasValue |
nullable이 값이 있는지 확인 | if (nullableInt.HasValue) { ... } |
Value |
nullable의 값을 접근 | int value = nullableInt.Value; |
?? (Null coalescing operator) |
null이 아니면 이 값을 사용하고, 그렇지 않으면 이 대체 값을 사용 | int result = nullableInt ?? 0; |
GetValueOrDefault() |
값이 없으면 기본값을 반환 | int value = nullableInt.GetValueOrDefault(); |
GetValueOrDefault(T defaultValue) |
값이 없으면 지정된 기본값을 반환 | int value = nullableInt.GetValueOrDefault(10); |
Credits: Image by storyset