본문 바로가기
C#/etc.

[C#] ? 문법 (question mark)

by 스누누피 2024. 11. 28.

 

다른 사람의 코드를 리뷰 하던 중 ? 가 사용되는 경우를 여럿 발견해서 한번 정리해 보았다.

 

case1. 삼항연산자 ?

  • 대표적인 ? 문법으로 간단한 if else문을 한줄로 표현할 수 있다.
  • 조건식 ? 조건이 참인 경우 : 조건이 거짓인 경우;
int i = 100;

// i가 100 이상인 경우 1을 아니면 0을 반환
int reuslt = i >= 100 ? 1 : 0;

Console.WriteLine(reuslt); // 1

 

case2. type 뒤 ? (Nullable)

  • 변수를 선언할 때 타입에 따라 초기값이 지정 된다. 대표적으로 int는 0, string은 ""
    이 초기값도 활용해야 할 경우 사용하면 좋은 문법이다. 해당 문법을 사용하지 않으면 기본적으로 변수에 null이 들어갈 수 없다.
  • TYPE? 변수명;
// Nullable 변수로 선언
int? i;

i = null;
Console.WriteLine(i == null); // True

i = 10;
Console.WriteLine(i); // 10

 

case3. 결과값 확인 ? (null 방지)

  • 프로젝트를 진행 중 메서드를 이용할 때 문법 오류나 통신 문제 등 다양한 이유로 null이 return 되는 경우가 있다.
    이때 null이 반환된 변수로 특정 메소드나 필드를 호출하면 오류가 나기 때문에 null을 판단해야 하는 경우가 생긴다.
  • ?를 붙이고 메서드나 필드를 호출하면 null인 경우 해당 코드는 실행되지 않는다.
  • 변수?.메서드(); or 변수?.필드;
// 데이터베이스의 속성 타입을 가져오는 코드
DbAttribute dbAttribute = DbAttribute.GetDbAttribute("example");

// 이때 dbAttribute가 null 인 경우 코드가 실행되지 않는다.
// null이 아닌 경우에만 DB속성 타입이 ELEMENT인지 확인
if (dbAttribute?.Type.CompareTo(DbAttributeType.ELEMENT) == 0)
{
    // 처리 코드
}

 

case4. 변수 처리 ?? (더블 물음표 연산자)

  • 변수 값이 null인지 판단할때 사용되는 문법이다.
  • 변수 ?? null인 경우 반환값;
// Nullable 변수 선언
int? i;
i = null;

// i가 null인지 판단해서 null이면 100이 아니면 그대로 i가 반환
int result = i ?? 100;
Console.WriteLine(result); // 100

 

'C# > etc.' 카테고리의 다른 글

[C#] 열거형 Enum  (0) 2024.12.16
[C#] as, is 키워드  (0) 2024.12.12
[C#] 연산자 오버로딩 (Operator Overloading)  (1) 2024.12.11