Code Monkey home page Code Monkey logo

refactoring's Introduction

refactoring 2nd

Practice refactoring techniques in the Martin Fowler's Refactoring 2nd edition

1장

  • 코드가 새로운 기능을 추가하기가 편한 상태가 아니라면, 먼저 새로운 기능을 추가하기 편한 상태로 리팩토링 하자
  • 리팩토링 전에는 우선 테스트를 작성하자 (나보단, 테스트를 믿자)
  • 값이 바뀌지 않는 변수는 매개변수로 전달시키고, 함수 내부에서 필요한 값은 함수 내부에서 선언하도록 하자
  • 변수 이름을 명확하게 정의하라
  • 자바 스크립트는 동적 타입 언어.. 타입을 드러나게 작성하면 도움된다 (혹은 TypeScript를 사용해도.. 좋을듯)
    • 매개 변수 이름을 타입으로 적으면 좋음.
    • 매개 변수 역할이 뚜렷하지 않으면 부정관사를 붙이자(a/an)
  • 변수 인라인
  • 지역 변수 제거
    • 임시 변수를 줄이자
    • 왜? 임시 변수는 그 함수 블락에서만 의미가 있어서.. 코드가 길어지면 이해하기 어려워질때가 많음.
  • 함수가 하는 일을 나타내는 명칭을 써야함.
    • format -> usd
    • 왜? usd 값으로 변환해주는 역할을 하고 있으니..
  • 리팩토링을 통한 성능 문제는.. 우선 신경쓰지 말고 진행하자
  • 모든 진행 단계를 잘게 나누자..

2장

  • 리팩터링은 코드를 이해하고 수정하기 쉽게 만드는 것.
  • 기능 추가는 기존 코드는 건드리지 않고, 새 기능을 추가하기만 하면 됨.
  • 리팩터링은.. 기능 추가는 절대하지 않고 코드 재구성에만 전념.
  1. 기능 추가 전 리팩토링
  • 함수 매개변수화..같은 작업
  1. 코드의 의도가 더 명확하게 드러나도록 리팩토링
  2. 쓰레기 줍기 리팩토링
  • 쓸데 없는 코드를 제거, 혹은 로직의 복잡도를 줄인다
  • 리팩토링하지 말아야할 때는..?
    • 굳이 수정할 필요 없다면.. (그 코드에 기능추가 같은게 들어가는 것이 아니라면..)
  • 리팩토링 시 고려해야할 문제?
    • 리팩토링의 목적은 개발 기간을 단축하고자 하는 것
  • 테스트는 리팩토링 과정에서 버그가 생길 수 있다는 불안감을 해소할 수 있음.
  • 레거시 프로그램 리팩토링 전략?
    • 테스트를 추가할 틈새를 찾아서, 시스템을 테스트 해야 한다는 것.
  • 테스트 주도 개발
    • 테스트 코드 + 리팩토링
  • 성능 최적화에 돌입하기 전에는.. 코드를 다루기 쉽게 만드는 것에 집중하는게 좋음.

3장

  • 리팩토링을 하면 해결할 수 있는 코드 징후..
  1. 이름이 이상할 떄
  2. 중복된 코드가 있을 때
  3. 함수가 길 때
  • 조건문 분해, 반복문 쪼개고...
  1. 매개 변수 목록이 많을 때..
  • 객체로 넘기거나..
  1. 전역 데이터를 사용할 떄
  2. 가변 데이터를 사용하고 있을 때..
  3. 단일 책임 원칙에서 벗어날 떄
  4. 기본형에 집착하지말고.. 객체로 바꾸자..
  5. switch문
  6. 반복문
  7. 거대한 클래스..
  • 연관성 있는 필드들을 따로 묶어서... 클래스로 추출하자
  1. 상속 포기
  • 부모 클래스는 모두 추상 클래스여야한다..
  1. 주석
  • 주석을 남겨야겠다는 생각이 들면, 주석이 필요없는 코드로 리팩토링을 해보자

4장

  • 리팩토링을 하려면, 견고한 테스트가 받쳐줘야 한다..
  • 테스트가 견고하면 --> 디버깅 시간이 줄어든다.
  • TDD , 프로그래밍 기법
  • Mocha -> Javascript test framework
  • 테스트를 작성할 경우, 반드시 실패하는 테스트도 작성해보자
  • 테스트 관련 버그 중 가장 안좋은 유형은, 테스트끼리 상호작용하게 하는 것.
  • 각 테스트 전에, 공통적으로 실행되는 부분을 모아둘 수도 있다 (beforeEach 문)
  • 모든 조건이 만족할 경우말고, 특정 값이 비어있을 경우 어떻게 동작할지도 테스트를 작성해보자
  • 실패는 검증 단계에서 실제 값이 여상 범위를 벗어났다는 뜻
    • 반면, 에러는 검증보다 앞선 과정에서 발생된 예외상황을 말한다.

refactoring's People

Contributors

102092 avatar johnnorris avatar wickedwukong avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.