C#

[C#]제네릭 메서드(Generic Method) 널(Null) 반환 방법

DevStory 2021. 9. 19.

제네릭 메서드(Generic Method)는 데이터 타입을 일반화한 메서드입니다.

 

<>를 사용하여 특정 데이터 타입으로 치환할 수 있으며, 데이터 타입 검사가 엄격하다는 장점이 있습니다.

 

데이터 타입 검사가 엄격하기 때문에 null을 반환하는 경우 컴파일 에러가 발생하는데요.

 

제네릭 메서드와 마찬가지로 일반 메서드도 null을 반환할 수 없지만, Nullable 연산자를 사용하면 null을 반환할 수 있습니다.

 

하지만, 제네릭 메서드는 Nullable 연산자를 사용할 수 없기 때문에 다른 방법으로 null을 반환하는 코드를 작성해야 합니다.

 

이번 포스팅에서는 제네릭 메서드에서 null을 반환하는 방법을 정리하였습니다.


제네릭 메서드(Generic Method)에서 null 반환

매개변수가 null이 아니면, 매개변수의 값을 반환하고 매개변수의 값이 null이면, null을 반환하는 코드입니다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return null;
  }
}

하지만, return null; 코드에서 에러가 발생하는데요.

 

C#에서 null이 올 수 있는 데이터 타입이 있고 불가능한 데이터 타입이 존재합니다. 기본적으로 숫자형 타입들은 Nullable 연산자를 사용하지 않으면, null값을 할당할 수 없습니다.

 

즉, 제네릭 타입은 null이 가능한 타입도 있고 불가능한 타입이 있으므로 null을 반환할 수 없습니다.

 

만약, 제네릭 메서드에서 null을 반환하고 싶은 경우 default(T)를 사용합니다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return default(T);
  }
}

Console.WriteLine(ReturnValue<string>(null) == null); // True

위 코드를 실행하면, 매개변수의 값이 null이므로 Console에서 True를 출력합니다.

 

defualt()는 C#에서 타입의 기본 값을 반환하는 메서드입니다.

 

bool형은 false, 숫자형은 0, 참조형식은 null을 반환합니다.

int num = default(int);

Console.WriteLine(num); // 0

 

다음과 같이 숫자형 타입인 int형을 Nullable 타입으로 정의하여 null값을 할당합니다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return default(T);
  }
}

int? num;
num = null;

Console.WriteLine(ReturnValue(num) == null); // True

변수 num의 값이 null이므로 Console에 True를 출력합니다.

반응형

댓글