책/Refactoring 2판
-
[Refactoring] 12장 : 상속 다루기책/Refactoring 2판 2024. 2. 14. 11:45
메서드 올리기 // before class Parent { } class Child1 extends Parent { get name() {} } class Child2 extends Parent { get name() {} } // after class Parent { get name() {} } class Child1 extends Parent { } class Child2 extends Parent { } 부모에게는 없는데 자식에게만 중복되서 등장하는 필드, 메서드들이 있는 경우 이를 부모로 올려주는 것이 중복을 막을 수 있다. 만약 동작이 다를 경우, 템플릿 메서드 만들기를 고려할 수 있다. 필드 올리기 // before class Parent { } class Child1 extends Paren..
-
[Refactoring] 11장 : API 리팩터링책/Refactoring 2판 2024. 2. 14. 11:43
질의 함수와 변경 함수 분리하기 // before function getSomeDataAndSetAnother() { const result = func(); setAnother(); return result; } // after function getSomeData() { return func(); } function setAnother() { thie.field = 0; } 질의 함수 (읽기 함수) 는 어떠한 부수효과도 없어야 한다. 명렁-질의 분리 (Command-query seperation) 만약 읽기 함수 내에 무언가 다른 일을 하는 게 있다면, 바로 추출해주자. 함수 매개변수화하기 // before function addTwoTimes(number) { return number + numbe..
-
[Refactoring] 10장 : 조건부 로직 간소화책/Refactoring 2판 2024. 2. 14. 11:37
조건문 분해하기 // before if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) { charge = quantity * plan.summerRate; } else { charge = quantity * plan.regularRate + plan.regularServiceCharge; } // after if (summer()) { charge = summerCharge(); } else { charge = regularCharge(); } 복잡한 조건문은 코드를 어렵게 만드는 원흉이다. 코드를 부위별로 분해한 다음 코드 덩어리들을 의도를 살린 이름의 함수 호출로 바꿈 조건식 통합하기 // before if (someExp..
-
[Refactoring] 9장 : 데이터 조직화책/Refactoring 2판 2024. 2. 14. 11:35
변수 쪼개기 // before let temp = 2 * (height + width); console.log(temp); temp = height * width; console.log(temp); // after const perimeter = 2 * (height + width); console.log(perimeter); const area = height * width; console.log(area); 변수는 하나의 역할만 수행해야한다. 만약 두가지 이상의 역할을 수행한다면, 변수를 쪼개고 적절한 이름을 붙여준다. 참고 : 변수는 웬만하면 선언 후 바로 초기화 → 상수화하는 것이 좋다. 필드 이름 바꾸기 // before class Organization { get str() {} } // af..
-
[Refactoring] 8장 : 기능 이동책/Refactoring 2판 2024. 2. 14. 11:32
함수 옮기기 // before class SomeClass { get someFunc(); } // after class AnotherClass { get someFunc(); } 이는 클래스 이름을 바꾼게 아니라 함수가 옮겨진 것이다. 함수는 대부분 어떤 클래스에 속하게 된다. (자바의 경우 필수다) 만약 어떤 함수가 자신이 속한 모듈 A보다 모듈 B의 요소를 더 참조한다면 모듈 B로 옮겨주는 것이다. 필드 옮기기 // before class Customer { get plan() { return this.plan; } get discountRate() { return this.discountRate; } } // after class Customer { get plan() { return this.p..
-
[Refactoring] 7장 : 캡슐화책/Refactoring 2판 2024. 2. 14. 11:31
레코드 캡슐화하기 // before someRecord = {name: "choijaewon", country: "korea"}; // after class SomeRecord { constructor (data) { this._name = data.name; this._country = data.country; } get name() { return this._name; } set name(arg) { this._name = arg; } get country() { return this._country; } set country(arg) { this._country = arg; } } 레코드를 직접 노출하는 것이 아닌 클래스로 감싸고, 접근자 메서드를 통해 접근 및 수정할 수 있도록 바꾼다. 컬렉션 캡..
-
[Refactoring] 6장 : 기본적인 리팩터링책/Refactoring 2판 2024. 2. 14. 11:24
1. 함수 추출하기 function print() { printBanner(); let someVar = calculate(); // print detail console.log("something 1"); console.log("something 2"); } // after function print() { printBanner(); let someVar = calculate(); printDetail(); function printDetail() { console.log("something 1"); console.log("something 2"); } } 말 그대로 함수 추출하기 2. 함수 인라인하기 function func() { return someFunc1(); } function someFun..
-
[Refactoring] 3장 : 코드에서 나는 악취책/Refactoring 2판 2024. 2. 14. 11:22
기이한 이름 함수, 변수, 클래스 등은 이름만 보고도 무슨 일을 할지 알 정도로 잘 써야 한다. 함수 선언 바꾸기, 변수 이름 바꾸기, 필드 이름 바꾸기 중복 코드 코드가 여러 군데에 똑같은게 있다면 하나로 통합하자 두 메서드가 똑같은 표현식 사용 → 함수 추출하기 를 통해 양쪽 모두 추출한 메서드를 호출하도록 비슷한 표현식 → 문장 슬라이드하기 를 통해 비슷한 부분을 한 곳에 모아 함수 추출 서브 클래스들에 코드 중복 → 메서드 올리기 를 적용하여 부모로 옮김 긴 함수 함수는 잘게 쪼개는 것이 좋다 ← 이때 주의할 점은 함수의 이름이 반드시 명확해야 함 함수 내부의 코드의 목적을 분명하게 나타내줘야함 그래야만 함수를 잘게 쪼개는 의미가 있다. 함수 추출하기 임시 변수 줄이기 - 임시 변수를 질의 함수로..