[리팩터링 2판] 01. 리팩터링: 첫 번째 예시

1장은 간단한 예시를 계속 리팩터링 해나가면서 전반적인 리팩터링 방법에 대해 다루고 있다.
직접 코드를 작성해가며 학습했다. 다만 테스트는 해보지 않았을 뿐…😅
모두 예시기 때문에 각 챕터별 요약보다는 인상깊은 문장, 리팩토링 팁, 모르는 자바스크립트 문법으로 정리하였다.
모든 코드는 study-refactoring 깃허브 저장소 에서 확인할 수 있다.


1.0. Impact Sentences

프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다.

디지털 시대의 연약한 자여, 그대 이름은 소프트웨어

리팩터링하기 전에 제대로 된 테스트부터 마련한다. 테스트는 반드시 자가진단하도록 만든다.

-> 이 책에서도 테스트의 중요성을 언급하고 있다. 꼭 체득할 것!

이런식으로 파악한 정보는 휘발성이 높기로 악명 높은 저장 장치인 내 머릿속에 기록되므로, 잊지 않으려면 재빨리 코드에 반영해야 한다.

컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다.

간결함이 지혜의 정수일지는 몰라도, 프로그래밍에서만큼은 명료함이 진화할 수 있는 소프트웨어의 정수다.

이번 예시를 통해 배울 수 있는 가장 중요한 것은 바로 리팩터링하는 리듬이다. 사람들에게 내가 리팩터링하는 과정을 보여줄 때마다, 각 단계를 굉장히 잘게 나누고 매번 컴파일하고 테스트하여 작동하는 상태로 유지한다는 사실에 놀란다.

리팩터링을 효과적으로 하는 핵심은, 단계를 나눠야 더 빠르게 처리할 수 있고, 코드는 절대 깨지지 않으며, 이러한 작은 단계들이 모여서 상당히 큰 변화를 이룰 수 있다는 사실을 깨닫는 것이다.


1.1. Refactoring Tips

나는 함수의 반환 값에는 항상 result라는 이름을 쓴다.

자바스크립트와 같은 동적 타입 언어를 사용할 때는 타입이 드러나게 작성하면 도움된다. 그래서 나는 매개변수 이름에 접두어로 타입 이름을 적는데, 지금처럼 매개변수의 역할이 뚜렷하지 않을 때는 부정 관사(a/an)를 붙인다.

volumeCredits 변수 제거 작업

  • 반복문 쪼개기 : 변수 값을 누적시키는 부분을 분리
  • 문장 슬라이드하기 : 변수 초기화 문장을 변수 값 누적 코드 바로 앞으로 옮김
  • 함수 추출하기 : 별도 함수로 추출
  • 변수 인라인하기 : volumeCredits 변수 제거

가변 데이터는 금방 상하기 때문에 나는 데이터를 최대한 불변처럼 취급한다.

ex) Object.assign({}, aPerforamance);

-> 전달받은 데이터를 그대로 사용하지 말고, 복사를 해서 사용하자


1.2. javascript grammar

Object.assign()

result = Object.assign(target, source);
// target에 source를 얕은 복사

만약 target과 source의 객체 중 동일한 키를 갖는 속성이 존재할 경우, 그 속성값은 source 객체의 속성 값으로 덮어쓰여진다.

map()

    let arr = [1,2,3];
    arr.map(callback(currentValue[, index[, array]])[, thisArg])

map은 callback 함수를 각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 만듭니다.


댓글남기기