20210415(목)
20210415(목)
1. 학습 날짜
2021-04-15
2. 학습 시간
10:00 ~ 14:00
3. 학습 범위 및 주제
todo 앱 리팩토링
fetch 학습
4. 학습 목표
todo 리팩토링
fetch 학습
5. 학습 정리
x
6. 상세 학습 내용
todo 앱을 리팩토링했다. PR 리뷰를 토대로 수정을 했는데, 리뷰의 내용을 보니 내 코드에는 문제가 생각보다 많았었다.
일단 내가 생각할 때 가장 문제가 되는 부분은 코드의 중복이다.
코드의 중복이 나오게 된 원은은 간단하다. 만약
update
라는 함수가 있다면 이update
로status
,complete
등의 값을 업데이트 한다고 할떄 인자등을 주는 방식으로 하면 오류가 날 수 있고 알아보기가 힘드니 이걸updateStatus
,updateComplete
와 같은 함수로 만들어서 사용할 때 보다 명확히 하게 만들었었다.여기까지는 좋다. 다만, 방금 만든 2개의 update 메서드는 한줄을 제외하고는 완전 동일한 코드기 때문에 엄청난 중복이 발생해버린다.
따라서 중복되는 부분을 메서드로 빼서 관리하게 만들면 너무나 좋을텐데, 난 그렇게 하지 않았다.
즉 리팩토링이 전혀 되지 않은 코드였다.
이건 나의 과정보다는 결과가 중요하다는 신념이 조금 많이 작용한거 같다. 또한 이 프로젝트가 팀프로젝트가 아닌 혼자서 진행하는 프로젝트라서 그런면도 있는거같다.
아무튼 이런 문제를 발견했다.
fetch 로 데이터 가져오기
fetch의 리턴값은 promise 객체다. 그리고 이 promise 객체가 resolve 되면 response 객체가 나온다.
response 객체를 출력한다고 해서 모든 정보가 다 나오지 않는다. 지금 현재 이 response 객체로 할 수 있는건 status의 확인이 전부라고 봐도 무방하다.
그러면 body 등의 정보는 어떻게 들거오냐? 간단하다.
response.json()
등으 메서드를 사용하면된다.자 여기서 또 문제가 발생한다.
response.json()
메서드는 프로미스를 기반으로 동작한다. 즉 리턴값이 프로미스 라는 것이다.다시 한번 여기서 then 등을 사용해서
promise
가 resolve 가 되기를 기다려야 한다.그렇게 기다린 다음 사용하면 된다.
방금 promise 가 resolve가 되기를 then 을 사용해서 기다린다고 했는데, 이보다 더 멋진? 그런 방법이 존재한다.
바로 async 와 await 를 사용하는 것이다.
간단하게 async를 사용하면 그 함수가 비동기 처리가 되는 것이다.
이제 async 함수에서 비동기관련 메서드들을 실행시키자.
그러면 await는 무엇이냐. 이름 그대로 무언가를 기다리는 키워드다. 그러면 무엇을 기다려? 바로 promise 가 리졸브 되기를 기다린다!
즉 이전에는 then 을 사용해서 인자로 들어간 프로미스가 리졸브 되기를 기다렸지만 이제는 async 함수 안에서 await 만들 사용하면 resolve 가 된 데이터가 나온다!
7. 오늘 학습 내용에 대한 개인적인 총평
오늘도 변명이지만.... 윗집과 전쟁을 하느라 하.... 답답하다...
8. 다음 학습 계획
vue 를 이용한 todo 앱 만들어보기
블랙커피스터디 2차 과제하기
Last updated