킹의 개발일지
쏙쏙 들어오는 함수형 코딩 34일차 본문
34일차 <중첩된 객체에 함수형 도구 사용하기2>
저번 파트에서 재귀를 사용해서 중첩된 객체를 변경하는 nestedUpdate 메서드를 작성해보았다. 그러나 이는 한 가지 생각해 보아야 할 점이 있는데, 중첩이 길어질 수록 긴 '키 경로'가 필요하다.
예를들어, 블로그 포스트 저자의 이름을 대문자로 바꾸는 update를 생각해보자. 우선 블로그 데이터에서 포스트들을 골라내야하므로 'posts' 라는 키가 필요할 것이다. 그리고 그 포스트들중 '12'번 포스트이며, 그 post 객체의 'author', 즉 저자 정보들 중에 'name' 값을 변경해야 하므로, 키 경로는 다음과 같을 것이다.
[ "posts", "12", "author", "name" ]
다음은 이렇게 기억해낸 키 경로를 파라미터로 넘겨주어야한다.
nestedUpdate(blog, ['posts', '12', 'author', name], capifalize);
이 정도는 키 경로를 어느정도 기억할 수 있다만, 더 길어진다면 기억 해야할 키가 엄청나게 증가할 것이다! (중간에 실수라도 하면 어쩔려고! ㅜㅜ)
이때 추상화 벽을 만들고, 의미있는 이름을 함수에 붙혀서 벽뒤로 넘겨버린다면 사용하는 사람 입장에서는 키 경로를 일일히 기입할 필요가 없을 것이다.(그만큼 실수도 줄것이다!)
코드를 통해 작동 방법을 추상화 벽뒤로 넘겨버리는 것을 살펴보자.
다음과 같이 updatePostById라는 메서드를 만들어서 복잡한 nestedUpdate를 숨겨버리자.
function updatePostById(category, id, modifyPost) {
return nestedUpdate(category, ['post', id], modifyPost);
}
또한 글쓴이를 수정하는 함수가 필요하다.
function updateAuthor(post, modifyUser) {
return update(post, 'author', modifyUser);
}
마지막으로 사용자 이름을 대문자로 바꾸는 함수도 만들어보자.
function capifalizeName(user) {
return update(user, 'name', capitalize);
}
이제 모두 합쳐보자.
# 추상화
updatePosrtById(blogCategory, '12', (post) => updateAuthor(post, capitalizeUserName));
# 추상화 하기 전
nestedUpdate(blog, ['posts', '12', 'author', name], capifalize);
추상화 벽뒤로 감추기전과 비교하면 키 경로가 확연히 줄어든 모습을 볼 수 있다. 이렇게 하면 작성 해야할 함수와 코드수는 증가하지만 직접 키 경로를 적지 않아도 된다. 사용자 입장에서는 키경로를 실수할 확률이 매우 낮아질 것이다. (키 경로를 계속 외울 수 는 없으니 말이다..)
오늘은 복잡한 기능을 추상화 벽 뒤로 감쳐버림으로써 사용자의 실수를 줄일 수 있는 방법을 배웠다. 확실히 작성해야할 코드 수는 증가하겠지만 '내가 고생하면 사용하는 사람이 편해진다!' 라는 명언 처럼 추상화 시킴으로써 다른 사람이 실수할 확률이 내려가 생산성이 더 증가할 것이 분명하다고 믿는다.
'독서 > 책너두 챌린지' 카테고리의 다른 글
| 쏙쏙 들어오는 함수형 코딩 36일차 (0) | 2023.09.18 |
|---|---|
| 쏙쏙 들어오는 함수형 코딩 35일차 (0) | 2023.09.16 |
| 쏙쏙 들어오는 함수형 코딩 33일차 (0) | 2023.09.14 |
| 쏙쏙 들어오는 함수형 코딩 32일차 (0) | 2023.09.14 |
| 쏙쏙 들어오는 함수형 코딩 31일차 (0) | 2023.09.13 |