Extract Function, ํจ์ ์ถ์ถํ๊ธฐ์ ๋ํด ์์๋ณด์.
์์ฝ
์ฝ๋
// before
function printOwing(invoice) {
printBanner();
let outstanding = calculateOutstanding();
// ์ธ๋ถ ์ฌํญ ์ถ๋ ฅ
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
}
// after
function printOwing(invoice) {
printBanner();
let outstanding = calculateOutstanding();
// ์ธ๋ถ ์ฌํญ ์ถ๋ ฅ
printDetails(outstanding);
function printDetails(outstanding) {
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
}
}
๋ฐฐ๊ฒฝ
- ์ฝ๋ ์กฐ๊ฐ์ ์ฐพ์ ๋ ๋ฆฝ๋ ํจ์๋ก ์ถ์ถํ๊ณ ์ด๋ฆ์ ๋ถ์ธ๋ค.
- ์ธ์ ๋ ๋ฆฝ๋ ํจ์๋ก ๋ฌถ์ด์ผ ํ๋๊ฐ?
- ํจ์๋ก ์ถ์ถํ๋ ๊ฒ์ โ๋ชฉ์ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌโํ๋ ํ์๋ค.
- ์ฆ, ๊ตฌํ์ ๋ํํ๋ ์ด๋ฆ์ ๋ถ์ผ ์ ์์ ๋ ์ถ์ถํ๋ค.
- ์ด๋ฌํ ์์น์ ์ ์ฉํ๊ฒ ๋๋ฉด ํจ์๋ฅผ ์์ฃผ ์งง๊ฒ ์์ฑํ๋ ์ต๊ด์ด ๋ค๊ฒ ๋๋ค.
- ๋ค๋ง ์งง์ ํจ์๋ ์ข์ ์ด๋ฆ์ ์ง์์ ๋ ๋ฐํ๋๋ค.
์ ์ฐจ
- ํจ์๋ฅผ ์๋ก ๋ง๋ค๊ณ ๋ชฉ์ ์ ๋๋ฌ๋ด๋ ์ด๋ฆ์ ๋ถ์ธ๋ค.
- ์ด๋ป๊ฒ์ ์ง์คํ๋ฉด ์๋๋ค. ๋ฌด์์ ํ๋์ง๊ฐ ๋๋ฌ๋์ผ ํ๋ค.
- ๋ชฉ์ ์ด ๋ ์ ๋๋ฌ๋๋ค๋ฉด ํจ์์ ๊ธธ์ด๋ ์ค์์น ์๋ค. ํ์ค๋ ์๊ด์๋ค.
- ์ถ์ถํ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ์ ํจ์์ ๋ถ์ฌ๋ฃ๋๋ค.
- ์ถ์ถํ ์ฝ๋ ์ค ์๋ณธ ํจ์์ ์ง์ญ ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ์ถ์ถํ ํจ์์ ์ ํจ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ณ์๋ ์๋์ง ๊ฒ์ฌํ๋ค. ์๋ค๋ฉด ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ค.
- ์ค์ฒฉํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค.
- ์ฌ์ฉ์ ํ์ง๋ง ๊ฐ์ด ๋ฐ๋์ง ์๋ ๋ณ์๋ผ๋ฉด ํจ์์ ์ธ์๋ก ๋ค ๋ฐ์๋ฒ๋ฆฐ๋ค.
- ์ถ์ถํ ์ฝ๋ ์์์๋ง ์ฌ์ฉํ๋ ๋ณ์๊ฐ ์๋๋ฐ, ์ ์ธ์ ๋ฐ์์ ํ๋ค๋ฉด ์์ผ๋ก ์ง์ด๋ฃ๋๋ค.
- ์ถ์ถํ ์ฝ๋ ์์์ ๊ฐ์ด ๋ฐ๋๋ ๋ณ์ ์ค์์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ๊ฒ์ ์ฃผ์ํ์.
- ๋๋ฌด ๊ฐ์ ์์ ํ๋ ์ง์ญ ๋ณ์๊ฐ ๋ง๋ค๋ฉด ์ถ์ถ์ ๋ฉ์ถ๊ณ ๋ ์์ ๋ฒ์์์ ๋ฆฌํฉํ ๋ง์ ์๋ํด๋ณด์์ผ ํ๋ค.
- ๋ณ์๋ฅผ ๋ค ์ฒ๋ฆฌํ๋ค๋ฉด ์ปดํ์ผํ๋ค.
- ์๋ณธ ํจ์์์ ์ถ์ถํ ์ฝ๋ ๋ถ๋ถ์ ์๋ก ๋ง๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฌธ์ฅ์ผ๋ก ๋ฐ๊พผ๋ค.
- ํ ์คํธํ๋ค.
- ๋ค๋ฅธ ์ฝ๋์ ๋ฐฉ๊ธ ์ถ์ถํ ๊ฒ๊ณผ ๋๊ฐ๊ฑฐ๋ ๋น์ทํ ์ฝ๋๊ฐ ์๋์ง ์ดํ๋ค. ์๋ค๋ฉด ๋ฐฉ๊ธ ์ถ์ถํ ์ ํจ์๋ฅผ ํธ์ถํ๋๋ก ๋ฐ๊ฟ์ง ๊ฒํ ํ๋ค.
- ๋น์ทํ ์ฝ๋๊ฐ ์๋ค๋ฉด ์ถ์ถํ ํจ์๋ฅผ ํธ์ถํ๋๋ก ๋ฐ๊พธ๊ณ ํ ์คํธํ๋ค.
- ๋น์ทํ ์ฝ๋๊ฐ ์๋ค๋ฉด ์ถ์ถํ ์ ํจ์๋ฅผ ์ธ๋ผ์ธํ๊ฑฐ๋ ๋ค๋ฅธ ํจ์๋ก ์ถ์ถํ๋ค.
์์
function printOwing(invoice) {
let outstanding = 0;
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
// ๋ฏธํด๊ฒฐ ์ฑ๋ฌด(outstanding)๋ฅผ ๊ณ์ฐํ๋ค.
for (const o of invoice.orders) {
outstanding += o.amount;
}
// ๋ง๊ฐ์ผ(dueDate)์ ๊ธฐ๋กํ๋ค.
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()}`);
}
1. ์ ํจ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๋ณ์๊ฐ ์์ ๋
function printOwing(invoice) {
let outstanding = 0;
printBanner();
// ๋ฏธํด๊ฒฐ ์ฑ๋ฌด(outstanding)๋ฅผ ๊ณ์ฐํ๋ค.
for (const o of invoice.orders) {
outstanding += o.amount;
}
// ๋ง๊ฐ์ผ(dueDate)์ ๊ธฐ๋กํ๋ค.
const today = Clock.today;
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30);
printDetails();
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
function printDetails() {
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
console.log(`๋ง๊ฐ์ผ: ${invoice.dueDate.toLocaleDateString()}`);
}
}
2. ์ง์ญ ๋ณ์๊ฐ ์ฌ์ฉํ ๋
function printOwing(invoice) {
let outstanding = 0;
printBanner();
// ๋ฏธํด๊ฒฐ ์ฑ๋ฌด(outstanding)๋ฅผ ๊ณ์ฐํ๋ค.
for (const o of invoice.orders) {
outstanding += o.amount;
}
// ๋ง๊ฐ์ผ(dueDate)์ ๊ธฐ๋กํ๋ค.
const today = Clock.today;
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30);
printDetails(invoice, outstanding);
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
}
function printDetails(invoice, outstanding) {
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
console.log(`๋ง๊ฐ์ผ: ${invoice.dueDate.toLocaleDateString()}`);
}
- ์ค์ฒฉ ํจ์์์ ์ง์ญ ํจ์๋ก ๋นผ๋ฒ๋ ธ๋ค.
- ๊ทธ ๊ณผ์ ์์ ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ก ๋ณ๊ฒฝํ๋ค.
function printOwing(invoice) {
let outstanding = 0;
printBanner();
// ๋ฏธํด๊ฒฐ ์ฑ๋ฌด(outstanding)๋ฅผ ๊ณ์ฐํ๋ค.
for (const o of invoice.orders) {
outstanding += o.amount;
}
recordDueDate(invoice);
printDetails(invoice, outstanding);
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
}
function recordDueDate(invoice) {
const today = Clock.today;
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30);
}
function printDetails(invoice, outstanding) {
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
console.log(`๋ง๊ฐ์ผ: ${invoice.dueDate.toLocaleDateString()}`);
}
- ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง๊ฐ์ผ ์ค์ ๋ก์ง๋ ์ถ์ถํ๋ค.
3. ์ง์ญ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ๋
- ์ง์ญ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊น๋ค๋ก์์ง๋ค.
- ๋น์ฅ ์ด๋ป๊ฒ ํ๋์ง ๋ณด๊ณ ๋ณต๊ธฐํด๋ณด์.
function printOwing(invoice) {
let outstanding = 0;
printBanner();
// ๋ฏธํด๊ฒฐ ์ฑ๋ฌด(outstanding)๋ฅผ ๊ณ์ฐํ๋ค.
for (const o of invoice.orders) {
outstanding += o.amount;
}
recordDueDate(invoice);
printDetails(invoice, outstanding);
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
}
function printOwing(invoice) {
printBanner();
let outstanding = 0;
for (const o of invoice.orders) {
outstanding += o.amount;
}
recordDueDate(invoice);
printDetails(invoice, outstanding);
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
}
- ์ผ๋จ ๋ณ์ ์ ์ธ๋ฌธ์ ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ์ฝ๋ ๊ทผ์ฒ๋ก โ์ฌ๋ผ์ด๋โํ๋ค.
function printOwing(invoice) {
printBanner();
let outstanding = 0;
for (const o of invoice.orders) {
outstanding += o.amount;
}
recordDueDate(invoice);
printDetails(invoice, outstanding);
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
}
function calculateOutstanding(invoice) {
let outstanding = 0;
for (const o of invoice.orders) {
outstanding += o.amount;
}
return outstanding;
}
- ์ผ๋จ ์ถ์ถํ ๋์ ์ฝ๋๋ฅผ ๋ฝ์์ ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
function printOwing(invoice) {
printBanner();
let outstanding = calculateOutstanding(invoice);
recordDueDate(invoice);
printDetails(invoice, outstanding);
}
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
function calculateOutstanding(invoice) {
let outstanding = 0;
for (const o of invoice.orders) {
outstanding += o.amount;
}
return outstanding;
}
outstading
๋ณ์๋ ๋ณ๊ฒฝ๋๋ ๊ณณ์ด ์ ํ์ ์ด๋ค. ํจ์ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ๋ณ๊ฒฝํ๋ค.
function printOwing(invoice) {
printBanner();
const outstanding = calculateOutstanding(invoice);
recordDueDate(invoice);
printDetails(invoice, outstanding);
}
function printBanner() {
console.log('***********************');
console.log('**** ๊ณ ๊ฐ ์ฑ๋ฌด ****');
console.log('***********************');
}
function calculateOutstanding(invoice) {
let result = 0;
for (const o of invoice.orders) {
result += o.amount;
}
return result;
}
function recordDueDate(invoice) {
const today = Clock.today;
invoice.dueDate = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 30);
}
function printDetails(invoice, outstanding) {
console.log(`๊ณ ๊ฐ๋ช
: ${invoice.customer}`);
console.log(`์ฑ๋ฌด์ก: ${outstanding}`);
console.log(`๋ง๊ฐ์ผ: ${invoice.dueDate.toLocaleDateString()}`);
}
- ์ฝ๋ฉ ์คํ์ผ์ ๋ณ๊ฒฝํ๋ค.