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 프로그래밍에서 꼭 알아두면 좋은 기능입니다.