개요
명령 객체는 복잡한 연산을 다룰 수 있는 강력한 메커니즘을 제공한다.
큰 연산을 하나를 여러 작은 메서드로 쪼갠다. 로컬 변수를 인스턴스 변수로 만들어 메서드 끼리 정보 공유할 수도 있다. 쪼게진 보조 메서드들은 좋은 디버깅 포인트가 된다.
다만, 복잡하지 않은 함수에 굳이 명령 사용하면 득보다 실이 크다.
예시
class ChargeCalculator{ constructor(customer, usage, provider){ this._customer = customer; this._usage = usage; this._provider = provider; } get baseCharge(){ return this._customer.baseRate * this._usage; } get charge(){ return this.baseCharge + this._provider.connectionCharge; } } //호출자... const monthCharge = new ChargeCalculator(customer, usage, provider).charge; |
//클래스를 생성하고 호출하는 함수 만들기 function charge(customer, usage, provider){ return new ChargeCalculator(customer, usage, provider).charge; } |
class ChargeCalculator{ constructor(customer, usage, provider){ this._customer = customer; this._usage = usage; this._provider = provider; } get baseCharge(){ return this._customer.baseRate * this._usage; } //보조함수 제거하기,먼저 로컬 변수로 추출 get charge(){ const baseCharge = this.baseCharge; return baseCharge + this._provider.connectionCharge; } } |
class ChargeCalculator{ constructor(customer, usage, provider){ this._customer = customer; this._usage = usage; this._provider = provider; } //보조함수 제거하기, 보조 함수 인라인 하기 get charge(){ const baseCharge = this._customer.baseRate * this._usage; return baseCharge + this._provider.connectionCharge; } } |
function charge(customer, usage, provider){ return new ChargeCalculator(customer, usage, provider) .charge(customer, usage, provider); } class ChargeCalculator{ constructor(customer, usage, provider){ this._customer = customer; this._usage = usage; this._provider = provider; } //함수로 변경하기 위에 함수 포맷에 맞게 함수 선언 바꾸기 적용 charge(customer, usage, provider){ const baseCharge = this._customer.baseRate * this._usage; return baseCharge + this._provider.connectionCharge; } } |
function charge(customer, usage, provider){ return new ChargeCalculator(usage, provider) .charge(customer, usage, provider); } class ChargeCalculator{ constructor(usage, provider){ this._usage = usage; this._provider = provider; } //인스턴스 변수를 하나씩 점진적으로 제거하면서 매개변수를 사용하도록 수정 charge(customer, usage, provider){ const baseCharge = customer.baseRate * this._usage; return baseCharge + this._provider.connectionCharge; } } |
function charge(customer, usage, provider){ return new ChargeCalculator() .charge(customer, usage, provider); } class ChargeCalculator{ //나머지도 하나씩 적용하면서 테스트 charge(customer, usage, provider){ const baseCharge = customer.baseRate * usage; return baseCharge + provider.connectionCharge; } } |
function charge(customer, usage, provider){ const baseCharge = customer.baseRate * usage; return baseCharge + provider.connectionCharge; } //호출자... const monthCharge = new ChargeCalculator(customer, usage, provider).charge; |
'IT책, 강의 > 리팩터링' 카테고리의 다른 글
11 - API 리팩터링 - 오류 코드를 예외로 바꾸기 (0) | 2023.09.22 |
---|---|
11 - API 리팩터링 - 수정된 값 반환하기 (0) | 2023.09.21 |
11 - API 리팩터링 - 함수를 명령으로 바꾸기 (1) | 2023.09.19 |
11 - API 리팩터링 - 생성자를 팩터리 함수로 바꾸기 (0) | 2023.09.18 |
11 - API 리팩터링 - 세터 제거하기 (0) | 2023.09.17 |