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 |
Tags
- Spring
- IOC
- SpringBoot
- 컨트리뷰팅
- 2차원배열 정렬
- circular dependency
- 운영체제
- resilience4j
- 마이크로서비스패턴
- GraphQL
- 프로젝트설정
- cannot import name
- bulk_create
- bean-validator
- 토이프로젝트
- API문서화
- Npoem
- DI
- 상속모델
- Java
- circuitbreaker
- 좋은코드란
- django
- Not Null constraint failed
- 함수형프로그래밍
- 쿼리셋합치기
- 주니어개발자
- 일급함수
- 객체비교
- n poem
Archives
- Today
- Total
코딩 하는 가든
함수형 프로그래밍 - 함수형 예제(1) - _filter, _map 함수 만들기 본문
함수형 프로그래밍의 예제
다음과 같은 user object list가 있다고 하자
var users = [
{id : 1, name: 'ID', age: 36},
{id : 2, name: 'JM', age: 25},
{id : 3, name: 'MK', age: 33},
{id : 4, name: 'WT', age: 32},
{id : 5, name: 'JW', age: 26},
{id : 6, name: 'QE', age: 29},
{id : 7, name: 'WF', age: 31},
{id : 8, name: 'DZ', age: 23}
];
기존의 프로그래밍 방식은 아래와 같다.
// 30세 이상인 유저 필터
var temp_users = [];
for (var i=0; i<users.length; i++) {
if (users[i].age >= 30) {
temp_users.push(users[i]);
}
}
console.log(temp_users);
// 유저들의 이름만 수집.
var names = [];
for (var i=0; i<users.length; i++) {
names.push(users[i].name);
}
console.log("이름 수집" + names);
// 30세 이하인 유저 필터
temp_users = [];
for (var i=0; i<users.length; i++) {
if (users[i].age < 30) {
temp_users.push(users[i]);
}
}
console.log(temp_users);
// 유저들의 나이만 수집.
var ages = [];
for (var i=0; i<users.length; i++) {
ages.push(users[i].age);
}
console.log("나이 수집 : " + ages);
위의 코드에서 나이 필터를 하는 함수에서 for문이 중복 되게 된다. 이 부분에서 다른 점은 if (users[i].age < 30) 과 if (sers[i].age >= 30) 부분인데 함수형 프로그래밍에서는 이러한 부분을 함수 자체를 인자로 넘겨줌으로써 중복을 줄여 나갈 수 있다.
예시
function _filter(users, predi) {
var new_list = [];
for (var i=0; i<users.length; i++) {
if (predi(users[i])) {
new_list.push(users[i]);
}
}
return new_list;
}
_filter(users, function(user) { return user.age >= 30}); // 나이 30이상인 유저 필터
_filter(users, function(user) { return user.age < 30}); // 너아 30미만인 유저 필터
위처럼 user를 받아 나이가 30 이상인, 30 미만인 사람을 리턴하는 함수를 작성하여 _filter 함수에 인자로 넘겨줌으로써 나이 필터를 구현할 수 있으며 비슷하게 이름이 특정 문자로 시작한다던지 혹은 꼭 user가 아니더라도 다른 리스트에 대해서 필터링을 할 수 있는 범용 함수가 구현되었다.
수집 함수 또한 다음과 같이 함수형 프로그래밍 방식으로 작성할 수 있다.
function _map(users, mapper) {
var new_list = [];
for (var i=0; i<users.length; i++) {
new_list.push(mapper(users[i]));
}
return new_list;
}
_map(users, function(user) { return user.name}); // 유저들의 이름 수집
_map(users, function(user) { return user.age}); // 유저들의 나이 수집
위의 두 함수를 함께 활용해 다음과 같이 사용할 수도 있다.
_map(
_filter(users, function(user) { return user.age >= 30}),
function(user) { return user.name}
) // 나이가 30이상인 유저들의 이름 수집
위와 같이 함수형 프로그래밍은 여러 함수들의 조합으로 재사용성을 높여 나갈 수 있다는 편리하고도 매우 큰 장점이 있다.
'함수형프로그래밍' 카테고리의 다른 글
함수형 프로그래밍 - 일급함수 (0) | 2020.03.14 |
---|---|
함수형 프로그래밍 - 순수함수 (0) | 2020.03.11 |