내일배움캠프

내일배움캠프 15일차: where,any

pracumj 2024. 10. 2. 21:45

# where
- **조건을 만족하는 요소만을 필터링하여 새로운 컬랙션을 반환**
- **쿼리 표현식 또는 메서드 체인을 사용하여 조건에 맞는 요소를 필터링 하고 지연 실행 방식으로 처리**
- **새로운 컬렉션을 반환하기 때문에 원본 컬렉션 수정X**

## 사용예시
```
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0); // 2, 4

n은 numbers의 약자 (n % 2 == 0) -> 조건부
n => 조건부를 만족하는 값을 새로운 list에 대입

```
###  **언제 `where`와 `foreach`를 사용할까?**
#### **`where`를 사용할 때**:
- 컬렉션에서 특정 조건을 만족하는 **새로운 컬렉션**을 얻고자 할 때.
- 필터링된 결과가 필요하거나, 원본 컬렉션을 변경하지 않고도 특정 조건을 적용하고자 할 때.
- 예: 사용자의 나이가 18세 이상인 사용자들만 필터링하여 새로운 리스트를 만들 때.
#### **`foreach`를 사용할 때**:
- 컬렉션의 모든 요소를 순회하며, 특정 작업을 수행하고자 할 때.
- 예: 각 사용자의 이름을 출력하거나, 특정 조건을 만족할 때만 작업을 수행할 때.

# Any 메서드
- **Any 메서드는 LINQ에서 제공하는 확장 메서드
- **컬렉션(리스트,배열 등)이나 데이터 집합에 특정 조건을 만족하는 요소가 존재하는지를 확인하기 위해 사용**
- **Any() 조건을 만족하는 요소가 최소 하나라도 존재하면 true, 하나도 없으면 false return** 
## 사용 방법
1. 조건이 없는 Any  
     - 컬렉션이 비어 있는지 아닌지를 확인하기 위해 사용 
     - 요소가 하나라도 있으면 true

```
var numbers = new List<int> { 1, 2, 3, 4 };
bool hasElements = numbers.Any(); // true (컬렉션에 요소가 있음)

```
2. 조건을 전달하는 Any(Func<T, bool>)
     - 람다 식으로 조건을 전달하여, 조건을 만족하는 요소가 있는지 확인
     - 조건을 만족하면 true
```
var numbers = new List<int> { 1, 2, 3, 4 };
bool hasEvenNumber = numbers.Any(n => n % 2 == 0); // true (짝수가 하나라도 있음)
```
## Any 메서드의 특징
- Any() 메서드는 foreach 루프를 사용하는 것과 비슷한 방식으로 컬렉션을 순회, 요소가 발견되면 즉시 순회를 종료하고 true를 반환
- 조건을 만족하는 요소를 찾기 위해 컬렉션 전체를 확인X

## Any() 메서드의 장점

1. **가독성 향상**: 코드의 의도를 좀 더 명확하게 표현 가능
2. **짧고 간결한 코드**: 복잡한 조건을 짧고 간결하게 표현할 수 있습니다.

## 주의사항
- 조건이 너무 복잡하거나 컬렉션이 매우 클 경우 성능에 영향을 줄 수 있으므로 간단한 조건으로 사용하는 것이 좋습니다.