Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 프로그래밍
- loose coupling
- 구독패턴
- 2차방정식
- 루즈 커플링
- unity google 로그인
- unity
- cshop
- c# 포맷
- 시간더하기
- 안드로이드 구글 로그인
- google sign-in
- 숫자 포맷
- 시간빼기
- microsoft.entityframeworkcore.design
- 유니티 구글 연동
- 구글 로그인 연동
- c# 시간계산
- 웹서버 만들기
- 문자열 포맷
- c#
- 날짜 포맷
- swagger
- timespan
- 이벤트 기반 아키텍처
- 개발
- 데이터관리
- firebase auth
- c샵
- http server
Archives
- Today
- Total
Debug & Think
[C#] [LINQ] First(), FirstOrDefault(), Find() 차이점 정리 본문
LINQ를 쓰다 보면 First(), FirstOrDefault(), Find() 같은 메서드를 자주 마주치게 되는데,
겉보기엔 비슷해 보여도 각각 쓰임새가 미묘하게 달라서 가끔 헷갈릴 때가 있습니다.
그래서 헷갈리지 않도록, 이 셋의 차이점과 언제 어떤 걸 써야 할지 한 번 정리해봤습니다.
✅ 기본 비교
항목 | First() (LINQ) | FirstOrDefault () (LINQ) | Find() |
대상 컬렉션 | IEnumerable<T>(배열, 리스트 등) | IEnumerable<T>(배열, 리스트 등) | List<T> 전용 |
반환값 | 조건에 맞는 첫 번째 요소 | 조건에 맞는 첫 번째 요소 또는 기본값 |
조건에 맞는 첫 번째 요소 또는 기본값 |
조건 불일치 시 | 예외 발생 (InvalidOperationException) |
default 반환 | default 반환 |
내부 구현 | foreach 기반 | foreach 기반 | for 루프 기반 (List에 최적화) |
✅ 장단점 비교
항목 | First() (LINQ) | FirstOrDefault () (LINQ) | Find() |
장점 | - 배열, 리스트, LINQ 모두 사용 가능 - LINQ 메서드 활용 (Where().First() 등) |
- 배열, 리스트, LINQ 모두 사용 가능 - LINQ 메서드 활용 (Where(). FirstOrDefault () 등) - 조건 불일치 시에도 예외 미발생 |
- List<T>에 최적화 → 미세하게 빠름 - 조건 불일치 시에도 예외 미발생 |
단점 | - 예외 발생 → try-catch 필요 |
- default 반환 → null 체크 또는 기본값 처리 필요 |
- List<T>에서만 사용 가능 - LINQ 메서드 활용 불가 (Where(...).Find(...) 불가) - default 반환이라 → null 체크 또는 기본값 처리 필요 |
First VS FirstOrDefault
First()를 사용하는 이유
- 존재 보장 시 의도 명확화
→ 조건을 만족하는 요소가 반드시 존재해야 함을 코드로 드러남
(예: 불변 데이터, 필수 설정 등) - 버그 조기 발견
→ 값이 없으면 예외 발생 → 문제를 조기에 인지 가능
→ 반대로 FirstOrDefault()는 null 반환 → 버그가 늦게 드러날 수 있음 - 코드 간결성
→ 값이 항상 존재한다면 null 체크 없이 깔끔하게 처리 가능
FirstOrDefault()의 사용 이유
- 존재하지 않을 수 있는 경우에 안전하게 처리
→ 조건을 만족하는 요소가 없으면 예외 없이 기본값(null 등) 반환
→ try-catch 없이 null 체크로 처리 가능 - 코드 단순화
→ 예외 처리가 필요 없어 코드가 더 깔끔해짐
그렇다면 어떤 상황에서 써야 할까?
상황추천 | 메서드 | 이유 |
조건을 반드시 만족하는 요소가 존재해야 함 | First() | 존재 보장 시 명확한 코드, 버그 조기 발견 |
조건을 만족하지 않을 수도 있음 | FirstOrDefault() | 예외 없이 기본값 반환, 안전한 처리 |
List<T>에서만 빠르게 찾고 싶을 때 | Find() | 성능 최적화, 간편한 사용 (LINQ는 불가) |
🎯 성능 차이는 일반적으로 미미하지만, 빈번하게 호출되거나 데이터가 많을 때는 Find()가 유리할 것 같다.
✅ 간단 코드 예시
// First
var item1 = list.First(x => x.Id == 5); // 조건 불일치 시 예외
// FirstOrDefault
var item2 = list.FirstOrDefault(x => x.Id == 5); // 없으면 null
// Find
var item3 = list.Find(x => x.Id == 5); // 없으면 null, List<T>에서만 가능
🔖 마무리 요약
- First() : "반드시 있어야 한다"는 전제에서 사용 → 실패 시 예외로 문제 조기 발견
- FirstOrDefault() : "없을 수도 있음"을 고려한 유연한 방식
- Find() : List<T>에서만 쓰는 빠르고 안전한 방법, 다만 LINQ 활용에는 불리