갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • 게임 매출 순위
  • 글로벌게임매출
  • Unity Graph
  • c# Thread
  • c# 코루틴
  • 강남 방탈출
  • 자바
  • 전세계게임매출순위
  • 알고리즘
  • C++
  • C# 예외 처리
  • C# boxing
  • 유니티 골드그래프
  • 유니티 그래프
  • C++ 상속
  • c# collection
  • 전세계 게임 매출
  • c# unboxing
  • pc게임 순위
  • C++ virtual
  • 2020년 게임 매출
  • 유니티 그래프 그리기
  • 게임 디자인 패턴
  • 롤 골드그래프
  • c# delegate
  • C++ 소멸자
  • 게임매출순위
  • pc 게임 순위
  • 모바일 게임 순위
  • c# coroutine

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

프로그래밍/C#

[C#] Elvis Operator (?, ??) 연산자

2020. 2. 6. 18:04
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
    '프로그래밍/C#' 카테고리의 다른 글
    • [C#] Boxing / Unboxing (1)
    • [C#] casting
    • [C#] Nullable<T>
    • [C#] 동등성 (Equality)
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바