728x90
반응형
1. 널 조건부 연산자 (null conditional operator)
using System;
class Car {
public int color = 10;
public void Go() { Console.WriteLine("Go"); }
}
class Program {
public static Car CreateCar(int speed) {
if(speed > 200)
return null;
return new Car();
}
public static void Main() {
Car c = CreateCar(100);
c.Go();
}
}
Car라는 클래스를 만들고 테스트를 위해 color와 Go라는 메소드를 만들었다.
그리고 밑에 CreateCar라는 메소드를 만들었다.
여기선 Car라는 객체를 만들어주는데 speed가 200보다 크다면 생성을 못 하게 했다.
그래서 Main이 문제 없이 실행되는데 만약 speed가 200보다 크면 예외가 발생한다.
그럼 안전하게 사용하려면 어떻게 해야 할까?
일단 생각나는건 if조건문을 추가하여 null이 아닐경우만 호출 할 수 있다.
그렇다면 코딩하다보면 위와 같은 예외처리를 할 일이 많을텐데 C#에선 간단한 문법을 제시했다.
using System;
class Car {
public int color = 10;
public void Go() { Console.WriteLine("Go"); }
}
class Program {
public static Car CreateCar(int speed) {
if(speed > 200)
return null;
return new Car();
}
public static void Main() {
Car c = CreateCar(300);
c.Go();
// if(c != null)
// c.Go();
c?.Go();
// int n = c.color; - error
// int n = c?.color; - error
int? n = c?.color;
// --- 배열
int[] arr = null;
// int n2 = arr[0]; - error
int? n2 = arr?[0];
}
}
① ?. ?[
=> 널 조건부 연산자(null conditional operator)
=> elvis operator
=> 좌변이 null 인 경우 좌변은 수행하지 않고 null 반환
2. 널 접합 연산자 (null coalescing operator)
using System;
class Car {
public int color = 10;
public void Go() { Console.WriteLine("Go"); }
}
class Program {
public static Car CreateCar(int speed) {
if(speed > 200)
return null;
return new Car();
}
public static void Main() {
Car c = CreateCar(300) ?? new Car();
int? n1 = null;
int n2 = n1 ?? 0;
Console.WriteLine(n2);
}
}
① ??
=> 널 접합 연산자(null coalescing operator)
=> 좌변이 null 인 경우 우변 값 반환
728x90
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] Boxing / Unboxing (1) (1) | 2020.02.10 |
---|---|
[C#] casting (0) | 2020.02.07 |
[C#] Nullable<T> (0) | 2020.02.04 |
[C#] 동등성 (Equality) (0) | 2020.02.04 |
[C#] 값 타입 vs 참조 타입(2) (1) | 2020.01.30 |