목록전체 글 (117)
킹의 개발일지
29일차 이전 포스팅에 이어 오늘도 함수형 도구 체이닝에 대해 설명한다. 우선 예시를 먼저 보자. 상황을 설명하면, 가진것: 전체 고객 배열 필요한것: 한 번만 구매한 고객들의 이메일 목록 계획: 한 번만 구매한 고객을 거른다. 고객 목록을 이메일 목록으로 바꾼다. 계획을 보면서 어떤 도구가 필요한지 눈에 보인다면 나이스.. 왠지 필터와 맵을 사용해야 할 것만 같은 느낌이 든다. 자. 코드로 옮겨보자. var firstTimers = filter(customers, (customer) => customer.purchases.length === 1); var firstTimerEmails = map(firstTimers, (customer) => customer.email); 여기서 잠깐 왠지 콜백 함수를..
28일차 왜 예제들은 항상 간단한 문제들을 가져올까 하는 생각이들 무렵, '함수형 도구 체이닝'파트에 도달했다. 함수형 도구 체이닝을 간단히 하면 '함수형 도구(map, fliter, ...)들을 조립해서 계산을 수행하는것' 이라고 볼 수 있는데, 대충 조립하면 이것만큼 가독성이 떨어지는게 없다. 한번보자 함수 기능을 먼저 설명하면, 구객들 중 우수고객(3개이상 구매)을 골라 그 구매들 중 가장 비싼 구매금액을 알아 내는함수다. function biggestPurchasesBestCustomers(customers) { var bestCustomers = filter(customers, (customer) => customer.purchases.length >= 3); var biggestPurchase..
26일차 'map()과 filter()' 이전에는 로우 레벨의 for문을 사용해서 forEach를 만들어 봤었다. forEach, map, filter, reduce는 프로그래밍을 하면서 상당히 많이 써봤던 함수들이다. 이번 파트에서는 map함수와 filter함수를 만들어 볼 것이다. 먼저 아램 메서드와 행동이 비슷한 함수들이 있다고 생각해보자. 행동은 배열을 돌면서 특정 함수를 적용하고, 함수가 적용된 배열을 반환한다.(우리가 흔히 사용하는 map함수) function emailsForCustomers(customers, goods, bests) { var emails = []; forEach(customers, (customer) => { var email = emailForCustomer, good..
21일차 코드의 냄새와 중복을 없애 추상화를 잘 할 수 있는 방법 암묵적 인자란 함수 본문에서 사용하는 어떤 값이 함수 이름에 나타나는것인데, * 냄새나는 코드 function setPriceByName (cart, name, price) { // 여기서 함수이름에 있는 Price가 암묵적 인자다. var item = cart[name]; var newItem = objectSet(item, 'price', price); // copy and write var newCart = objectSet(cart, name, newItem); // copy and write return newCart; } 위와 같은 함수가 암묵적 인자를 가지고 있는 함수다. 함수 이름에 있는 암묵적 인자 냄새 특징으로 1. 함수..
16일차 직접 구현 계층형 설계 패턴에서 1단계인 직접구현을 살펴본다. freeTieClip 메서드를 예로 드는데, 처음 봤을 때 이 코드는 정말이 내가 짤 만도 한 코드였다. 제대로된 설계 없이 기능을 추가한 코드인데, 함수가 알아야 할 필요 없는 구체적인 내용을 담고 있다. 직접 구현을 하는 방법으로 다이어 그램을 그려서 계층을 나누는데, 처음 읽을 때 골머릴 앓았다. 연습문제로 주는 문제에서 계층을 주었어야 했는데, 비즈니스 룰이 들어가지 않기에 높은 계층들은 제거했고, for문과 같이 언어에서 제공하는 저층 함수를 '사용'하고 있는 함수였기에 '사이에 새로운 계층', '가장 낮은 계층' 두 가지에서 엄청 고민했다. 물론 저자가 설명하는 것을 잘 읽으니 이해가 가긴 했다만 다이어 그램으로 계층을 분..
11일차 이전 파트를 이어서, 쓰기를 하면서 읽기도 하는 동작에 카피온라이트를 적용하는 방법을 설명한다. 대표적으로 읽기와 쓰기를 하는 자바스크립트 함수로 shift 함수가 있다. shift는 배열에서 첫 번째 원소를 제거하고 뺀 원소의 값을 반환한다. 뺸 원소를 반환하는 단계에서 읽기를, 배열에서 첫 번째 원소를 제거하는 쓰기를 한다. 방법으로 1. 읽기와 쓰기 함수로 각각 분리하는 방법, 2. 함수에서 값을 두 개 리턴하는 방법, 두가지를 설명하고 있다. 첫번째 방법의 경우 배열을 읽는 부분에선 카피온라이트를 적용하지 않고 쓰기 부분에서만 적용한다. 이는 두번째 방법도 마찬가지다. (읽기는 원본을 변경하지 않기 때문..) 흥미로웠던 점은 실제로 동작하는 함수는 안쪽에 두고 껍데기를 래핑해서 함수를 만..
6일차 전염되는 액션코드 이전 파트에서 데이터, 계산이 나와서 이번에 액션에 대한 이야기가 나올것이라 예상했었다. 액션에 대해 어렴풋이 느끼고 있었는데, 자바스크립트 코드를 보여주니 무심코 사용했던 코드들이 액션이었다는 걸 깨닳을 수 있었다. 저자는 액션이 결코 나쁜것은 아니라 강조하는데, 나 같은 경우에도 '뭐가 어떻게 나쁘다던데' 라고 어디서 들으면 이유는 잘 생각하지 않고 무의식적으로 해당 행동을 피하는 습관이 있다. 이 책을 읽으면서 무심코 액션은 나쁘다는 선입견을 가지고 있었는데, 생각을 바꾸는 계기가 되지 않았나 싶다. '차악'이 아니라 '또 다른 방법' 이라고 말이다. 여튼 저자는 액션 없이 코드를 작성할 수 없다고 이야기 하는데, 계산이 가질 수 있는 장점들을 말하며 액션을 분리해 계산으로..
시작하기 앞서.. 챌린지는 8월 초부터 시작했는데, 리뷰를 메모장에 따로 저장해 왔었다. 때문에 이전에 썼던 리뷰들은 몇 개씩 묶어서 포스팅 할 예정이다. 진짜 시작~! 1일차 챌린지 시작 함수형 코딩이 유행하는 시절, 그것이 뭔지 유튜브로 잠깐 보았었다. 그때 당시 흥미가 잠깐 있었지만, 그저 새로 생긴 프로그래밍 기법이니 하면서 넘겼었던 기억이 난다. 책너두에서 이에 대한 책이 있어 꾸준한 독서 습관도 기를겸 골라보게 됐다. 심플한 코드로 복잡한 소프트웨어 길들이기, 주 제목 보다 부제목에 먼저 눈길이 갔다. 함수형 코딩이 잘 몰랐기에, '심플한 코드로 복잡한 소프트 웨어 ...' 이 한 줄이, 복잡성에 해매다 찾은 오아시스마냥 눈이 끌리게 됐다. 안 그래도 개인 프로젝트를 하면서 간단한 로직의 컴포..
문제 Next.js 프레임워크를 사용하는 개인 프로젝트를 진행하던 중, 예상치 못한 에러에 봉착했다.. '바로 Time Zone 문제이다.' 서버측에서 시간별로 날씨 데이터를 묶어서 내려주는 API를 작성할 필요가 있었는데, 이때 Date 객체를 사용했다. 로컬에서는 당연히 문제없이 잘 돌아갔다. 하지만.. AWS의 Amplify로 배포후 문제가 생겼다. 바로 배포된 서버는 UTC를 사용하는데, 이 때문에 클라이언트에서 구현한 time filter가 일치하는 시간이 없다고 문제를 일으킨 것이다. log를 찍어보면 '1981-02-22T00:00Z' 같이 시간뒤에 'Z' 가 계속 나오는걸 볼 수 있었다. 지금와서 생각해보면 Amplify에서 Time Zome Config를 변경해주면 되는데, 그 때 당시에..
너도 책 읽을 수 있어.. '지금보다 더 나아가려면 어떻게 해야할까' 개인적인 답변은 잦은 독서(또는 강의 그런데 독서가 진리라 생각한다. 왜냐하면 독서는 배속이 안되거.. 음)와 배운 지식을 써먹을 프로젝트라고 생각한다. 대학생때 공부 습관도 (원론 학습 => 문제풀기 => 복습) 이 세단계였다. 그런데 요즘 책 한 권 때기가 힘들어진다. 어려운 내용이 계속 나오면 금새 지치고 엉덩이가 들썩거리기 시작한다.. 예전엔 안 그랬는데.. ㅠ 이때 친구 소개로 독서 스터디 '책너두' 를 알게 됐다. 약 두달간 진행 되는 책너두는 매일 읽을 분량을 지정해주고, 리뷰를 제출하는 방식이다. 3일간 미루면 탈락된다는 것은 강한 동기부여라고 생각한다. 여튼 많은 책 목록중 '쏙쏙 들어오는 함수형 코딩'을 골랐다. 책을..