Skip to content

Instantly share code, notes, and snippets.

@Hyodori04
Created March 5, 2023 09:11
Show Gist options
  • Save Hyodori04/539ad2170b6c1ca137cf1db77b76856f to your computer and use it in GitHub Desktop.
Save Hyodori04/539ad2170b6c1ca137cf1db77b76856f to your computer and use it in GitHub Desktop.
/*
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