본문 바로가기

리팩토링5

마틴 파울러 리팩토링 Push down field 아래 코드를 class Employee { private String quota; } class Engineer extends Employee {...} class Salesman extends Employee {...} 아래 코드처럼 바꾼다 class Employee {...} class Engineer extends Employee {...} class Salesman extends Employee { protected String quota; } 만약 필드가 하나의 서브 클래스에서만 사용된다면 상위클래스에 두지 말고 하위 클래스로 옮긴다. 예제에서는 Employee 클래스에서 Salesman 클래스로 옮겼다. 2020. 1. 3.
마틴 파울러 리팩토링 Replace temp with Query 아래 코드를 availableVacation(anEmployee, anEmployee.grade); function availableVacation(anEmployee, grade) { // calculate vacation } 아래 코드로 바꿉니다. availableVacation(anEmployee); function availableVacation(anEmployee) { const grade = anEmployee.grade; // calculate vacation... } 함수의 파라미터 목록은 요약 될 필요가 있습니다. 모든 코드가 그렇겠지만 내용이 중복되는 것을 피해야 합니다. 당연하겠지만 파라미터 목록이 짧으면 이해하기 더 쉽습니다. 파라미터를 없애기 가장 좋은 경우는 위의 예제처럼 같은 .. 2019. 12. 24.
마틴 파울러 - 리팩토링 Replace loop with Pipeline const names = []; for(const i of input) { if(i.job === "programmer") names.push(i.name); } const names = input .filter(i => i.job === "programmer") .map(i => i.name) ; for 문과 if문으로 구성된 코드를 filter 와 map으로 바꾼다. motivation 파이프라인을 사용하면 코드를 더 간결하게 작성할 수 있다. 로직을 보기 쉽게 작성하자. 순서 예제 csv 파일을 읽는 아래 코드가 있다고 한다. function acquireData(input) { const lines = input.split("\n"); let firstLine = true; const result.. 2019. 11. 20.
마틴 파울러 - 리팩토링 - Extract Class 소스 코드에서 각 클래스의 책임과 역할은 명확해야 한다. 하나의 클래스가 여러 개의 책임과 역할을 가지고 있다면 리팩토링이 필요하다. 여러 개의 책임을 가지는 클래스를 리팩토링해본다. 순서는 이렇다. 1. 책임을 어떻게 분리할지 기준을 정한다. 2. 책임을 넘길 자식 클래스를 만든다. 부모 클래스가 할 역할이 바뀐다면 역할과 책임에 맞게 클래스 이름을 바꾼다. 3. 부모클래스와 자식클래스를 연결할 때 자식 클래스의 인스턴스를 만든다. 4. 부모 클래스에서 자식 클래스로 옮길 변수들을 옮긴다. 5. 부모 클래스에서 자식 클래스로 옮길 함수들을 옮긴다. 6. 클래스, 함수 이름을 적절하게 바꾼다. 필요없는 함수는 지운다. 7. 새로운 자식 클래스를 더 만들어서 분리할지 결정한다. 코드를 통해서 단계를 살펴본.. 2019. 10. 31.
마틴 파울러 - 리팩토링 - Split Phase 리팩토링 기법. Split Phase const orderData = { orderString.split(/\s+/ ); const productPrice = priceList[orderData[0].split("-")[1]]; const orderPrice = parseInt(orderData[1]) * productPrice; const orderRecord = parseOrder(order); const orderPrice = price(orderRecord, priceList); function parseOrder(aString) { const values = aString.split(/\s+/); return ({ productID: values[0].split("-")[1], quantity:.. 2019. 10. 18.