킹의 개발일지
쏙쏙 들어오는 함수형 코딩 32일차 본문
32일차 <객체를 다루는 함수형 도구 사용하기>
이전까지 filter, map, reduce 등 배열을 효과적으로 다루기 위한 함수형 도구를 살펴봤다. 이번에는 객체를 다룰 수 있는 함수형 도구를 살펴보자.
먼저 냄새가 나는 코드를 함수를 살펴보자.
function incrementField(item, field) {
var value = item[field];
var newValue = value + 1;
var newItem = objectSet(item, field, newValue);
return newItem;
}
function decrementField(item, field) {
var value = item[field];
var newValue = value - 1;
var newItem = objectSet(item, field, newValue);
return newItem;
}
function doubleField(item, field) {
var value = item[field];
var newValue = value * 2;
var newItem = objectSet(item, field, newValue);
return newItem;
}
function havleField(item, field) {
var value = item[field];
var newValue = value / 2;
var newItem = objectSet(item, field, newValue);
return newItem;
}
일단 위 함수들은 함수 이름에 있는 암묵적 인자는 들어낸 상태다. 예를들어 incrementQuantity, incrementPrice, ... 같이 increment 형제들이 수두룩하게 나올 수 있는 부분은 잘 제거된 상태다. 그러나 위 네가지 함수는 newValue를 도출할 때만 다르고 나머지 코드는 동일하다. 냄새가 난다... 중복의 냄새가...
그럼 냄새를 제거하기 위해 어떻게 해야할까, 위 코드는 value를 변경할 때 빼곤 다 동일하다. 때문에 값을 변경해주는 부분만 따로 콜백으로 빼주면 어떨까?
function update(object, key, modify) {
var value = object[key];
var newValue = modify(value);
var newObject = objectSet(object, key, newValue);
return newObject;
}
이렇게 value를 변경하는 부분을 콜백으로 받고 나머지 부분을 일반화 시켰다. 이를 적용해서 위에서 본 4가지 함수를 고쳐보자.
function incrementField(item, field) {
return update(item, field, (value) => value + 1);
}
function decrementField(item, field) {
return update(item, field, (value) => value - 1);
}
...
엄청 깔끔해지지 않았는가! update의 콜백만 바꿔주면 원하는 메서드를 힘들이지않고 만들어 낼 수 있다!
앞에서 리팩터링을 두 개를 한번에 적용해봤다. 하나는 암묵적 인자를 드러내기이고(incrementQuantity => incrementField) 다른 하나는 함수본문을 콜백으로 바꾸기이다(incrementField에 update 메서드를 적용).
마지막을 예시를 하나 풀어보자.
문자열을 소문자로 바꿔 주는 lowercase() 라는 함수가 있다. User 객체가 주어질 때 User의 email을 소문자로 바꿔주는 update를 사용해서 메서드를 만들어 보자
User 객체는 다음과 같이 생겼다.
var User = {
name: "Joe",
lastName: "Nash",
email: "JOE@EMXAPLE.COM",
}
이제 User의 email을 소문자로 바꿔주는 메서드를 만들어 보자.
// 간단히 update 메서드에 콜백을 lowercase를 넘겨주면 된다.
update(user, 'email', lowercase);
오늘은 객체를 효과적으로 다루기위해 update 함수를 만들어서 사용해보았다. 점점 함수형 코딩의 매력에 사료되어 가는 느낌이든다!
'독서 > 책너두 챌린지' 카테고리의 다른 글
| 쏙쏙 들어오는 함수형 코딩 34일차 (0) | 2023.09.16 |
|---|---|
| 쏙쏙 들어오는 함수형 코딩 33일차 (0) | 2023.09.14 |
| 쏙쏙 들어오는 함수형 코딩 31일차 (0) | 2023.09.13 |
| 쏙쏙 들어오는 함수형 코딩 30일차 (0) | 2023.09.11 |
| 쏙쏙 들어오는 함수형 코딩 29일차 (0) | 2023.09.09 |