Created
March 5, 2023 09:11
-
-
Save Hyodori04/539ad2170b6c1ca137cf1db77b76856f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
1. 함수를 새 만들고 목적을 잘 드러내는 이름을 붙인다. (대상코드가 함수 호출문 하나처럼 매우 간단해도 '목적'을 잘 드러낼수 있다면 추출 해라) | |
2. 추출할 코드를 원본 함수에서 복사하여 새 함수에 붙여넣는다. | |
3. 추출한 코드 중 지역변수, 유효범위를 벗어나는 변수를 매개변수로 전달한다 | |
4. 변수를 다 처리하면 컴파일 한다. | |
5. 원본 함수에서 추출한 코드 부분을 새로 만든 함수를 호출하는 문장으로 바꾼다 | |
6. 테스트한다. | |
7. 다른 코드에 방금 추출한 것과 똑같거나 비슷한 함수를 살핀다. 있다면 새 함수를 호출하도록 바꿀지 검토한다. | |
*/ | |
/// 1. 유효 범위를 벗어나는 변수가 없을때 | |
// before | |
function printOwing(invoice) { | |
let outstanding = 0; | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
for (const o of invoice.orders) { | |
outstanding += o.amount; | |
} | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
// after | |
function printOwing(invoice) { | |
let outstanding = 0; | |
printBanner(); | |
for (const o of invoice.orders) { | |
outstanding += o.amount; | |
} | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
printDetail(); | |
function printDetail() { | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
} | |
function printBanner() { | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
} | |
/// 2. 지역 변수를 사용할 때 | |
// before | |
function printOwing(invoice) { | |
let outstanding = 0; | |
printBanner(); | |
for (const o of invoice.orders) { | |
outstanding += o.amount; | |
} | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
printDetail(invoice, outstanding); | |
function printDetail() { | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
} | |
function printBanner() { | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
} | |
// after | |
function printOwing(invoice) { | |
let outstanding = 0; | |
printBanner(); | |
for (const o of invoice.orders) { | |
outstanding += o.amount; | |
} | |
recordDueDate(invoice); | |
printDetail(invoice, outstanding); | |
} | |
function printBanner() { | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
} | |
function printDetail(invoice, outstanding) { | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
function recordDueDate(invoice) { | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
} | |
/// 3. 지역 변수의 값을 변경할때 | |
// before | |
function printOwing(invoice) { | |
let outstanding = 0; | |
printBanner(); | |
for (const o of invoice.orders) { | |
outstanding += o.amount; | |
} | |
recordDueDate(invoice); | |
printDetail(invoice, outstanding); | |
} | |
function printBanner() { | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
} | |
function printDetail(invoice, outstanding) { | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
function recordDueDate(invoice) { | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
} | |
// after | |
function printOwing(invoice) { | |
printBanner(); | |
const outstanding = calculateOutstanding(invoice) | |
recordDueDate(invoice); | |
printDetail(invoice, outstanding); | |
} | |
function printBanner() { | |
console.log("**************"); | |
console.log("*** 고객채무 ***"); | |
console.log("**************"); | |
} | |
function printDetail(invoice, outstanding) { | |
console.log(`고객명: ${invoice.customer}`); | |
console.log(`채무액: ${outstanding}`); | |
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`); | |
} | |
function recordDueDate(invoice) { | |
const today = Clock.today; | |
invoice.dueDate = new Date( | |
today.getFullYear(), | |
today.getMonth(), | |
today.getDate() + 30 | |
); | |
} | |
function calculateOutstanding(invoice) { | |
let result = 0; | |
for (const o of invoice.orders) { | |
result += o.amount; | |
} | |
return result | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment