Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# DefaultIfEmpty 메서드 완벽 정리: 빈 컬렉션을 안전하게 처리하는 방법

C#의 DefaultIfEmpty 메서드는 LINQ에서 제공하는 확장 메서드로, 빈 컬렉션을 안전하게 처리할 때 사용됩니다. 일반적으로 비어 있는 시퀀스에 대해 집계 연산이나 요소 접근을 수행하면 오류가 발생하거나 아무 결과도 얻을 수 없지만, 이 메서드를 사용하면 오류 대신 해당 타입의 기본값(default)을 반환합니다.

DefaultIfEmpty 메서드란?

DefaultIfEmpty는 System.Linq 네임스페이스에 포함된 IEnumerable<T> 확장 메서드입니다. 호출 대상 컬렉션이 비어 있으면 요소를 하나만 포함하는 새로운 시퀀스를 생성하며, 그 요소는 타입의 기본값(숫자형이면 0, 참조형이면 null)이 됩니다.

기본 사용법

다음과 같이 비어 있는 List가 있다고 가정해 보겠습니다.

List<double> myList = new List<double>();

위 리스트에는 요소가 하나도 없습니다. 이 상태에서 DefaultIfEmpty를 호출하면, 리스트가 비어 있으므로 double 타입의 기본값인 0이 담긴 시퀀스가 반환됩니다.

var res = myList.DefaultIfEmpty();

예제 코드

using System;
using System.Linq;
using System.Collections.Generic;

class Demo {
    static void Main() {
        // 요소가 없는 빈 리스트 생성
        List<double> myList = new List<double>();

        // 빈 리스트에 DefaultIfEmpty 적용
        var res = myList.DefaultIfEmpty();

        foreach (var a in res) {
            Console.WriteLine(a);
        }
    }
}

실행 결과

0

리스트가 비어 있었기 때문에 foreach 루프가 한 번 실행되며, double 타입의 기본값인 0이 출력됩니다. 만약 리스트에 요소가 존재했다면 DefaultIfEmpty는 원본 요소들을 그대로 반환합니다.

사용자 지정 기본값 지정하기

DefaultIfEmpty는 인수를 전달하여 원하는 기본값을 직접 지정할 수도 있습니다.

var res = myList.DefaultIfEmpty(-1);

이 경우 리스트가 비어 있으면 0 대신 -1이 출력됩니다. 참조 타입 컬렉션이라면 null 대신 특정 객체를 기본값으로 설정할 수 있어, NullReferenceException 방지나 초기값 보장에 유용합니다.

정리

DefaultIfEmpty 메서드는 다음과 같은 상황에서 특히 유용합니다.

• 데이터 조회 결과가 비어 있을 때 기본값으로 화면에 표시해야 하는 경우
• Average, Sum 등의 집계 연산 전에 빈 시퀀스로 인한 예외를 방지하고 싶은 경우
• LEFT JOIN과 유사한 동작이 필요한 LINQ 조인 쿼리를 작성하는 경우

간단한 메서드 하나로 빈 컬렉션 관련 예외 처리 코드를 크게 줄일 수 있으므로, 실무 LINQ 프로그래밍에서 꼭 알아두면 좋은 기능입니다.