filter() 함수
filter() 함수
개요
filter() 함수는 함수 프로그래밍에서 자주되는 고차 함수(-order function) 중로, 주어진건(판별 함수)을 만족 요소들만을 추출하여 새로운 반 가능한 객체를 반환 역할을 합니다. 이 함수는 데이터 처리, 리스트 조작, 조건 기반 필터링 등 다양한 상황에서 유용하게 활용되며, 코드의 가독성과 함수형 스타일을 유지하는 데 큰 도움을 줍니다.
filter()는 Python, JavaScript, Kotlin 등 주요 프로그래밍 언어에서 널리 지원되며, 대부분의 경우 이터러블(iterable) 객체와 함수(function)를 인자로 받아 동작합니다.
기본 구조 및 사용법
Python에서의 filter()
Python에서 filter() 함수의 기본 구조는 다음과 같습니다:
filter(function, iterable)
function: 각 요소에 대해 조건을 평가하는 함수. 이 함수는 불리언 값(True또는False)을 반환해야 합니다.iterable: 필터링할 대상이 되는 반복 가능한 객체 (예: 리스트, 튜플, 문자열 등).
반환값은 filter 객체로, 이는 이터레이터이므로 일반적으로 list()로 변환하여 사용합니다.
예시: 짝수만 추출하기
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 짝수만 필터링
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8, 10]
예시: 문자열 길이 기준 필터링
words = ["apple", "hi", "banana", "a", "python"]
# 길이가 4 이상인 단어만 추출
long_words = list(filter(lambda word: len(word) >= 4, words))
print(long_words) # 출력: ['apple', 'banana', 'python']
JavaScript에서의 filter()
JavaScript에서는 배열의 메서드로 filter()가 제공됩니다. 문법은 다음과 같습니다:
array.filter(callback(element[, index[, array]])[, thisArg])
callback: 각 요소에 대해 실행되는 함수. 조건을 만족하면true, 아니면false를 반환.thisArg: (옵션) 콜백 함수 내에서 사용할this값.
예시: 양수만 추출
const numbers = [-2, -1, 0, 1, 2, 3, 4];
const positives = numbers.filter(num => num > 0);
console.log(positives); // 출력: [1, 2, 3, 4]
예시: 객체 배열에서 조건 필터링
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 17 },
{ name: "Charlie", age: 30 }
];
const adults = users.filter(user => user.age >= 18);
console.log(adults);
// 출력: [{ name: "Alice", age: 25 }, { name: "Charlie", age: 30 }]
filter()의 특징과 장점
1. 불변성 유지
filter()는 원본 데이터를 변경하지 않고, 조건에 맞는 요소들로 구성된 새로운 객체를 생성합니다. 이는 함수형 프로그래밍의 불변성 원칙에 부합하며, 사이드 이펙트를 줄이는 데 도움이 됩니다.
2. 함수형 스타일
람다 함수나 익명 함수와 함께 사용하면, 코드가 간결하고 선언적으로 표현됩니다. 예를 들어, 반복문을 사용한 필터링보다 filter()를 사용하는 것이 더 직관적입니다.
3. 체이닝 가능
filter()는 map(), reduce() 등 다른 고차 함수와 함께 함수 체이닝(chaining)을 통해 복잡한 데이터 처리 파이프라인을 구성할 수 있습니다.
Python 예시 (itertools 또는 리스트 체이닝)
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
result = list(map(lambda x: x * 2,
filter(lambda x: x % 2 == 0, numbers)))
print(result) # 출력: [4, 8, 12, 16]
JavaScript 예시
const result = numbers
.filter(n => n % 2 === 0)
.map(n => n * 2);
주의사항 및 성능 고려
filter()는 조건에 맞는 모든 요소를 순회하여 검사하므로, 대용량 데이터에서는 성능에 주의가 필요합니다. 불필요한 반복을 피하기 위해 조건을 최적화하는 것이 중요합니다.- Python에서
filter()객체는 지연 평가(lazy evaluation)를 사용하므로, 모든 요소를 즉시 계산하지 않고 필요할 때 평가됩니다. 이는 메모리 효율성을 높이지만, 재사용 시 주의가 필요할 수 있습니다. - Python 3에서는
filter()가 리스트가 아닌 이터레이터를 반환하므로, 결과를 여러 번 사용하려면list()로 변환하는 것이 좋습니다.
관련 고차 함수
filter()는 다음과 같은 고차 함수들과 함께 자주 사용됩니다:
| 함수 | 설명 |
|---|---|
map() |
각 요소에 함수를 적용하여 새로운 값으로 변환 |
reduce() |
요소들을 누적하여 하나의 값으로 축소 |
any() / all() |
조건을 만족하는 요소가 있는지 여부 확인 (Python) |
find() |
조건을 만족하는 첫 번째 요소 반환 (JavaScript) |
참고 자료 및 관련 문서
- Python 공식 문서 - filter()
- MDN Web Docs - Array.prototype.filter()
- 함수형 프로그래밍
- 람다 함수
- 고차 함수
- 리스트 컴프리헨션 (Python)
filter() 함수는 데이터 처리의 핵심 도구 중 하나로, 조건 기반 선택 작업을 명확하고 효율적으로 수행할 수 있게 해줍니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.