들어가기 전에
지난 시간에 프로그램의 단순한 기능만을 이용해서 우리의 문제를 풀어 보았습니다.
우리는 변수를 배우기도 했습니다.
이번에는 우리가 만든 프로그램에 변수를 적용해서 고쳐 보도록 합니다.
학습 목표
우리의 애플리케이션에 변수를 적용합니다.
핵심 단어
- 변수(Variable)
- 리팩토링(Refactoring)
강의 듣기
들어가기 전에
지난 시간에 프로그램의 단순한 기능만을 이용해서 우리의 문제를 풀어 보았습니다.
우리는 변수를 배우기도 했습니다.
이번에는 우리가 만든 프로그램에 변수를 적용해서 고쳐 보도록 합니다.
학습 목표
우리의 애플리케이션에 변수를 적용합니다.
핵심 단어
강의 듣기
변수를 적용하기
우리는 지난 시간에 변수를 배웠습니다.
변수는 코드의 재사용성을 높이고 의미있는 이름을 붙여서 코드의 가독성을 높일 수 있습니다.
그러면 우리의 프로그램에도 변수를 도입해서 이러한 장점을 취해보도록 합니다.
AccountingApp.java
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = 10000.0;
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;
double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 0.2;
System.out.println("Value of supply : " + valueOfSupply);
System.out.println("VAT : " + vat);
System.out.println("Total : " + total);
System.out.println("Expense : " + expense);
System.out.println("Income : " + income);
System.out.println("Dividend 1 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
}
}
특정 값을 지역 변수로 바꾸기 위해 Extract Local Variable 기능을 이용할 수 있습니다.
특정 값을 블록으로 지정한 수 Refactor - Extract Local Variable을 클릭합니다.
변수의 이름을 지정하고 OK를 누르면 변수가 생성됩니다.
OK 옆의 Preview 버튼을 누르면 변수 생성 전후를 비교할 수 있습니다.
위와 같은 경우 2번째 동업자에게 할당된 배당 비율도 expenseRate로 바뀌게 된다는 것을 확인할 수 있습니다.
배당 비율은 비용 비율과 다르므로 취소합니다.
또는 변수로 지정하고자 하는 값을 지우고 이름을 바로 입력하면 이클립스에서 변수 생성을 도와 줍니다.
Create local variable 'expenseRate'를 클릭하면 변수를 생성해 줍니다.
이런 식으로 변수를 지정하여 바꾸어 줍니다.
이제 공급가 값만 바꾸어 주면 다른 값들은 실행할 때 자동으로 계산되는 것을 볼 수 있습니다.
생각해보기
1) 이렇게 프로그램의 기능은 바꾸지 않으면서 이해하기 쉽게 바꾸는 과정을 리팩토링이라고 합니다. 리팩토링에 대해 더 알아보세요.
comment
프로그램을 처음 만들때 이것저것 생각이 많아서 노력해도 중구남방이 될때가 많은데 기능 하나를 끝낼때 리펙토링을 하면 다음에 재사용하거나 응용할때 훨씬 에너지가 덜 들어갈거 같다.
리팩토링(Refactoring)이란 "'결과의 변경 없이 코드의 구조를 재조장함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 하기 위해 사용되며, 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다.
연습ㅎㅎ
import javax.swing.JOptionPane;
public class AccountingApp2 {
public static void main(String[] args) {
String cost = JOptionPane.showInputDialog("insert your vlalue of supply in month");
double valueOfSupply = Double.parseDouble(cost);
double vatRate = 0.1;
double expenseRate = 0.3;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - valueOfSupply*expenseRate;
double total = valueOfSupply + valueOfSupply*vatRate;
double vat = valueOfSupply*vatRate;
double divided_A = (income*0.5);
double divided_B = (income*0.3);
double divided_C = (income*0.2);
System.out.println("Value of supply : "+valueOfSupply);
System.out.println("VAT : "+ vat );
System.out.println("Total : "+ total );
System.out.println("Expense : "+ expense );
System.out.println("Income : " + income );
System.out.println("Dividend A : " + divided_A);
System.out.println("Dividend B : " + divided_B);
System.out.println("Dividend C : " + divided_C);
}
}
버튼을 만들면 좋겠다. GUI로!
와우 대박 너무좋은데요?
리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다.
1. 공급가, 세율과 같이 변동성이 있는 값을 변경할 때, 코드 내부에서 수정해야 하는 불편함.
- 사용자가 입력한 값을 받을 수 있도록 만들면 좋겠네요.
2. dividend1, dividend2, dividend3도 변동성이 있을 것 같아요.
- 투자한 사람들의 수가 여러명이 될수도 있고 각각의 지분율이 달라질 수도 있는데 이것에 대한 정보도 입력으로 받을 수 있도록 할 수 있으면 좋을 것 같습니다.
감사합니다!