Miyeon

투두리스트 프로젝트 리뷰

2021-01-29Project

이 과정동안 무엇을 새롭게 배웠는가

filter()과 find()의 차이

filter()는 주어진 함수 테스트를 통과하는 모든 요소를 모아 새로운 배열을 리턴함
find()는 주어진 함수 테스트를 통과하는 요소 중 첫 번쨰 요소의 값을 리턴함
리턴값으로 값을 원할 땐 find(), 배열을 원할땐 filter() 사용


요소 삽입 메서드 append()와 appendChild()의 차이

li.append(span, delBtn);

ParentNode.append()는 Node객체 또는 문자열 모두 삽입할 수 있다. 여러개의 문자와 노드를 추가할 수 있다.
Node.appendChild()는 문자열을 삽입할 수 없다. 오직 노드 하나만 추가할 수 있다.


베이비스텝으로 하나씩 완성해나가기

프로젝트를 처음 시작할 때 해야할 일이 막연하고 어렵게 느껴졌는데, 투두리스트 프로젝트를 하면서 작업방법을 찾은 듯 하다.

  • 앞으로 해야할 일을 작은 Task로 쪼갠다.
  • 각 테스크마다 시간을 산정하고 (보통 내가 산정한 시간보다 더 걸리니 1.5배 정도로 추정하는 게 적당하다)
  • 개별 Task를 하나씩 완성해나간다.

프로젝트를 하다 오류를 만나도 역시 위의 과정을 반복하다.

결국 시간을 들이면 해결할 수 있을거라는 작은 믿음이 생겼다.


함수명, 변수명이 엄청 중요하잖아?

깊은 고민 없이 이름을 정하다보니 다시 그 함수를 만나면 함수가 무슨 작업을 담당하는지 예측하기가 어려웠다. 그래서 리팩토링할 때 하나의 규칙을 정했다.

  • 함수는 하나의 역할만 할 것 (너무 많은 일을 시키는 경향이 있다. 재사용성을 위해서도 이 규칙은 매우 종요하다)
  • 함수 이름만 읽어도 그 함수가 어떤 책임을 가지고 있는지 알 수 있도록 이름을 짠다.

아직 낯설고 어려운 리팩토링

내 코드를 바라보고 바꿀 부분을 찾는 건 기존의 관점을 벗어나야 하는 작업이라서 매우 어려웠다.
뭔가 코드가 반복되고 냄새는 나는 것 같은데 그래서 어떻게 개선할지는 막막한 부분이 많았다.
아직 많은 연습과 좋은 코드를 만나는 경험이 필요하다는 생각이 들었다.

내가 이번 프로젝트를 리팩토링 할 때 참고했던 리팩토링 규칙은

  • 함수 하나당 단일 책임 원칙을 따른다.
  • 글로벌 변수 최소한으로 선언하기

글로벌 변수가 문제를 일으킬 경우를 만나다

  • 글로벌 변수를 사용하면 어디서 값이 바뀌는지 파악하기 어렵다. 이번 프로젝트에서 completeBtn을 글로벌로 선언하다보니 원치 않은 값으로 바뀌어서 당황했었다.
  • 문제가 생기면 해당 변수의 값이 어디서 어떻게 변하는지 찾으려면 많은 코드를 타고 들어가야 하는 불편함이 있다.
  • 그러므로 여러 코드를 읽지 않아도 바로 확인할 수 있도록 지역 변수로 선언하기

리팩토링 안전하게 하는 방법은?

하나만 기억하면 된다.

베이비 스텝

코드 한 줄 수정하고, 프로젝트 잘 작동하는지 확인하기, 바로 커밋한다.
초보일수록 작은 단위로 리팩토링을 진행해야 절망없이 작업을 이어 나갈 수 있다.