반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- enetrole
- c#
- Unreal Engine
- Algorithm
- 리플렉션 시스템
- 2022 kakao
- 프로젝트
- ai controller
- gameinstancesubsystem
- 최대값과 최솟값
- 2019 kakao
- 프로그래머스
- unrealengine
- fabrik ik
- 로컬 네트워크 연결
- 코딩테스트
- 구현
- pccp 기출문제
- 백준
- unity
- issac3d
- pcce 기출문제
- Summer/Winter Coding
- network model
- 2018 kakao
- timelessadventure
- fruitspuzzle
- C++
- netmode
- 당구 연습
Archives
- Today
- Total
LeeTaes 공부노트
[C#] Null 조건 연산자 본문
728x90
반응형
Null 검사
Null 체크는 프로그래밍에서 매우 중요한 작업으로, 매우 빈번하게 사용됩니다.
다음 예시를 보면
class Test
{
public string name = null;
}
internal class Program
{
static void Main(string[] args)
{
Test test = new Test();
PrintName(test);
}
static void PrintName(Test test)
{
Console.WriteLine(test.name);
}
}
PrintName() 함수에서 test의 name을 출력하는 부분이 있습니다.
현재 test 객체의 name은 null값을 가지고 있으며, 접근하게 된다면 NullReferenceException이 발생합니다.
위와 같은 상황을 방지하기 위해 저는 C++과 동일하게 Null 체크를 진행하였습니다.
...
static void PrintName(Test test)
{
if (test != null)
{
if (test.name != null)
{
Console.WriteLine(test.name);
}
else
{
Console.WriteLine("Null");
}
}
}
위와 같은 Null 체크를 더욱 쉽고 간편하게 할 수 있도록 도와주는 조건 연산자가 존재합니다.
Null 조건 연산자 ( Null-conditional operator )
C#의 Null 조건 연산자(Null-conditional operator)는 ?.과 ?[] 연산자를 통해 객체가 null인지 여부를 확인한 후 안전하게 속성이나 메서드에 접근하거나 배열/컬렉션의 요소에 접근할 수 있습니다.
위에서 진행했던 기존 방식보다 축약해서 사용할 수 있기에 자주 사용되는 연산자입니다.
- ?. 연산자 : 객체의 속성, 메서드에 접근할 때 사용합니다.
- ?[] 연산자 : 배열 또는 컬렉션의 인덱스에 접근할 때 사용합니다.
간단한 예시로 위 코드를 Null 조건 연산자를 사용해 수정해보도록 하겠습니다.
...
static void PrintName(Test test)
{
// test? : 테스트 객체가 존재하지 않는다면 Null
if (test?.name != null)
{
Console.WriteLine(test.name);
}
else
{
Console.WriteLine("Null");
}
}
?. 연산자를 사용해 코드를 약간 줄일 수 있었습니다. 위와 같은 상황에서 더욱 효율적으로 코드를 작성하기 위해
?? 연산자(null-coalescing operator)를 사용할 수 있습니다.
- ?? 연산자(null-coalescing operator) : 앞의 값이 Null인 경우 해당 연산자 뒤의 디폴트 값을 반환합니다.
...
static void PrintName(Test test)
{
// test? : test 객체가 존재하는지 확인
// ?? : test?.name이 Null인지 체크. Null이라면 뒤의 "Null" 문자열 반환
Console.WriteLine(test?.name ?? "Null");
}
?? 연산자를 사용해 더욱 코드를 깔끔하고 가독성 좋게 작성할 수 있습니다.
728x90
반응형
'Game Programming > C#' 카테고리의 다른 글
[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy) (0) | 2024.06.29 |
---|---|
[C#] 의존성 주입(DI, Dependency Injection) (0) | 2024.06.29 |
[C#] as, is (0) | 2024.06.25 |
[C#] Delegate (0) | 2024.06.25 |
[C#] 가변 파라미터, 선택적 인수, 명명된 인수 (0) | 2024.06.25 |