Javascript 공부를 하면서 filter 함수를 사용해 to-do-list를 구현했다.
Python에서 사용했던 filter 함수와 왜 다른 형태일까?
JS에서 사용하는 filter 함수
arr.filter(function)
- JS에선 filter가 배열의 메서드로 구현. 즉, 배열 객체에 직접 붙어서 동작
- map, reduce와 같은 함수도 배열 메서드로 존재
- 객체(배열)의 상태를 기반으로 메서드를 호출
Python에서 사용하는 filter 함수
filter(function, arr)
- Python에서는 filter가 배열에 의존하지 않고 "내장 함수"로 제공. 즉, Python은 함수형 프로그래밍 개념에 더 가까움
- map, reduce등을 모두 내장 함수로 처리
- 리스트뿐만 아니라, 튜플, 집합 등 다양한 반복 가능한(iterable) 객체에 적용 가능
설계 철학 차이
- JS의 filter : 배열 메서드와 같은 특정 데이터 구조에 대한 함수를 제공하는 객체 지향적 설계. 배열이 중심이 되어 해당 객체의 메서드를 호출
- Python의 filter : 함수형 프로그래밍 개념에 기반하여 다양한 iterable을 처리할 수 있도록 내장 함수를 제공. 함수가 대상 데이터를 처리하는 방식
정리하자면, JS와 Python의 설계 방식에 대한 차이로 인해 다른 형태를 가진다.
Python은 함수형 프로그래밍 언어?
- Nope. 함수형 프로그래밍 개념을 일부 차용했지만, 이를 기본으로 설계하지 않음
- 함수형, 객체지향, 절차적 프로그래밍 모두 지원하는 멀티 패러다임 언어