본문 바로가기

기타

(12)
[Refactoring] Dealing with Inheritance(2) 마틴파울러의 Refactoring 2판 12과의 내용 정리(2)입니다. Extract Superclass(슈퍼클래스 추출하기) - 메서드 올리기 리팩터링과 유사. - 공통 부분을 superclass로 분리하기! // from class Department { get totalAnnualCost() {...} get name() {...} get headCount() {...} } class Employee { get annualCost() {...} get name() {...} get id() {...} } ----------------------------- // to class Party { get name() {...} get annualCost() {...} } class Department e..
[Refactoring] Dealing with Inheritance(1) 마틴파울러의 Refactoring 2판 12과의 내용 정리(1)입니다. Pull Up Method(메서드 올리기) Push Down Method - child class에서 중복된 함수를 사용한다면, 올리기. - 만약 전체적인 흐름은 같지만 세부적인 내용이 다르다면 Form Template Method를 고려해보자. - Form Template Method는 함수를 올리고 세부 내용만 따로 abstract function으로 빼내는 방법! // from class Employee {...} class Salesperson extends Employee { get name() {...} } class Engineer extends Employee { get name() {...} } ------------..
[Refactoring] Refactoring APIs(2) 마틴파울러의 Refactoring 2판 11과의 내용 정리(2)입니다. Remove Setting Method(세터 제거하기) -무조건 접근자 메스드를 통해서만 필드를 다루려 할 때(심지어 생성자 안에서도) 세터를 제거해서 값이 바뀌면 안 된다는 뜻을 분명히 -생성 스크립트(creation script)를 사용해 객체를 생성할 때 설계자는 스크립트가 완료된 뒤로는 그 객체의 필드 일부(혹은 전체)는 변경되지 않으리라 기대한다. 이때 세터를 제거하여 의도를 명확히 // from class Person { get name() {...} set name(aString) {...} } ----------------------- // to class Person { get name() {...} }Replace ..
[Refactoring] Refactoring APIs(1) 마틴파울러의 Refactoring 2판 11과의 내용 정리(1)입니다. Separate Query from Modifier(질의 함수와 변경 함수 분리하기) -겉보기 부수효과(observable side effect)가 전혀 없이 값을 반환해주는 함수를 추구해야 한다. -이런 함수는 호출 문장의 위치를 호출하는 함수 안 어디로든 옮겨도 되며 테스트하기도 쉽다. (신경 쓸 거리가 매우 적다) -값을 반환하면서 부수효과도 있는 함수를 발견하면 무조건 분리를 시도하자! // from function getTotalOutstandingAndSendBill() { const result = customer.invoices.reduce((total, each) => each.amount + total, 0); se..
[Refactoring] Simplifying Conditional Logic 마틴파울러의 Refactoring 2판 10과의 내용 정리입니다. Decompose Conditional(조건문 분해하기) -복잡한 조건부 로직은 프로그램을 복잡하게 만드는 가장 흔한 원흉에 속한다. -무슨 일이 일어나는지는 이야기해주지만 '왜' 일어나는지는 제대로 말해주지 않을 때가 많은 것이 문제이다. // from if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) charge = quantity * plan.summerRate; else charge = quantity * plan.regularRate + plan.regularServiceCharge; -----------------------------..
[Refactoring] Organizing Data 마틴파울러의 Refactoring 2판 9과의 내용 정리입니다. Split Variable(변수 쪼개기) -역할이 둘 이상인 변수가 있다면 쪼개야만 한다. 코드를 읽는 이에게 커다란 혼란 초래..! // from let temp = 2 * (height + width); console.log(temp); temp = height * width; console.log(temp); --------------------------------- // to const perimeter = 2 * (height + width); console.log(perimeter); const area = height * width; console.log(area); -함수의 매개변수의 경우! // from function d..
[Refactoring] Moving Features(2) 마틴파울러의 Refactoring 2판 8과의 내용 정리(2)입니다. Replace Inline Code with Function Call(인라인 코드를 함수 호출로 바꾸기) -함수는 여러 동작을 하나로 묶어준다. -함수의 이름이 코드의 동작 방식보다는 목적을 말해주기 때문에 코드를 이해하기 쉬워진다. -함수는 중복을 없애는 데도 효과적이다. 그리고 동작을 변경할 때도 한 곳만 수정하면 된다. // from let appliesToMass = false; for (const s of states) { if (s === 'MA') appliesToMass = true; } ------------------------------------ // to let appliesToMass = stat..
[Refactoring] Moving Features(1) 마틴파울러의 Refactoring 2판 8과의 내용 정리(1)입니다. Move Function(함수 옮기기) -어떤 함수가 자신이 속한 모듈 A의 요소들보다 다른 모듈 B의 요소들을 더 많이 참조한다면 B로 옮겨야 한다. (캡슐화up, 의존성down) -함수를 옮길지 말지를 정하기는 쉽지 않지만, 선택이 어려울수록 큰 문제가 아닌 경우가 많다. -중첩 함수를 사용하다보면 숨겨진 데이터끼리 상호 의존하기가 아주 쉬우니 중첩함수는 되도록 만들지 말자. // from function trackSummary(points) { const totalTime = calculateTime(); const totalDistance = calculateDistance(); const pace = totalTime / 60..