지금 까지 배운 자바의 내용만으로도 많은 것을 할 수 있다.
하지만 문제해결에 있어 배운 내용만으로 부족한 시간이 오기도 한다.
이러한 불편함을 해소하기 위해 우리는 지식을 공부해야하고, 이를 프로젝트에 반영해야 한다.
최소한으로 공부하고 최대한으로 일하자.
그리고 이것을 반복하자.
그렇게 하면 공부와 일의 경계는 점점 사라질 것이고,
일하면서 공부하고 공부하면서 일하는 중급자가 되어있을 것이다.
지식은 골목골목을 분기하는 네트워크의 형상을 하고있다.
그렇기 때문에 우리가 원하는 지점에 도달하기 위해서 가장 중요한 것은 경로를 선택하는 일이다.
최소로 공부하고 최대의 결과를 내라, 가장 기억에 남는 말이다.
지금은 초급자인 나이지만, 중급자가 되려면 오늘과 같은 과정을 수없이 많이 반복해야 할 것이다.
공부를 하면 할수록 이론에서 그치는 것이 아닌 실습과 적용이 중요하다고 느껴진다.
강사님께서 소개한 예시 사진을 첨부하였다.
위와 같은 상황에서 돈의 흐름을 빠르게 계산해야 하는 문제가 있다.
계산기를 두드리자니 손이 너무 많이가고, 프로그램을 이용하자니 너무 복잡한 것 같다.
우리가 배운 자바를 이용해서 이 문제를 해결해 보자.
우선, 우리가 해야할 일은 현실을 분석하는 것이다.
판매자인 우리는 소비자에게 물건을 공급할 때 공급가(Value of supply)를 받는다.
그리고 공급가의 10% 만큼 소비자는 부가가치세(Value added tax)를 더 지불하고, 판매자는 국세청에 부가가치세를 납부한다.
이때 물건을 판매하기까지 30%의 비용이 들고 나머지 70%가 이익이라고 할때, 이익은 투자한 동업자들에게 5:3:2의 비율로 배당한다.
이 문제를 자바로 어떻게 해결할 수 있을까?
문제를 정의하고 나면, 문제를 해결해야 한다.
프로그램은 시간의 순서에 따라 작업을 실행한다.
우선 내가 알고있는 기능만을 이용해서 문제를 해결해보자.
public class AccountingApp {
public static void main(String[] args) {
System.out.println("Value of supply : " + 10000.0);
System.out.println("VAT : " + (10000.0 * 0.1));
System.out.println("Total : " + (10000.0 + (10000.0 * 0.1)));
System.out.println("Expense : " + (10000.0 * 0.3));
System.out.println("Income : " + (10000.0 - (10000.0 * 0.3)));
System.out.println("Dividend 1 : " + (10000.0 - (10000.0 * 0.3)) * 0.5);
System.out.println("Dividend 2 : " + (10000.0 - (10000.0 * 0.3)) * 0.3);
System.out.println("Dividend 3 : " + (10000.0 - (10000.0 * 0.3)) * 0.2);
}
}
System.out.println("Value of supply : " + 10000.0);
- 공급가는 10000.0 으로 정한다.
System.out.println("VAT : " + (10000.0 * 0.1));
- 부가가치세(VAT) 는 10000.0 에 10%인 0.1을 곱한 것이다.
System.out.println("Total : " + (10000.0 + (10000.0 * 0.1)));
- 총 판매가는 공급가와 부가가치세를 합한 10000.0 + (10000.0 * 0.1)이다.
System.out.println("Expense : " + (10000.0 * 0.3));
- 비용은 판매가의 30%니까 10000.0 * 0.3이다.
System.out.println("Income : " + (10000.0 - (10000.0 * 0.3)));
- 수익은 판매가에서 비용을 뺀 값이므로 10000.0 - (10000.0 * 0.3)이다.
System.out.println("Dividend 1 : " + (10000.0 - (10000.0 * 0.3)) * 0.5); System.out.println("Dividend 2 : " + (10000.0 - (10000.0 * 0.3)) * 0.3); System.out.println("Dividend 3 : " + (10000.0 - (10000.0 * 0.3)) * 0.2);
- 첫 번째 배당자는 수익의 50%를 배당받으므로 (10000.0 - (10000.0 0.3)) 0.5이다.
- 두 번째 배당자는 수익의 30%를 배당받으므로 (10000.0 - (10000.0 0.3)) 0.3이다.
- 세 번째 배당자는 수익의 20%를 배당받으므로 (10000.0 - (10000.0 0.3)) 0.2이다.
만약 공급가인 10000.0을 다른 값으로 교체하고 싶다면, 어떻게 해야할까?
이클립스 코드에서 공급가인 10000.0 부분을 드래그하고,
Search 버튼
을 클릭한다. Edit-Find/Replace
를 클릭한다. Replace All
을 클릭한다.위의 코드에서 변수를 적용해 고쳐보자.
변수는 코드의 재사용성을 높이고 의미있는 이름을 붙여 코드의 가독성을 높일 수 있다.
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);
}
}
우클릭-Refactor-Extract Local Variable..
을 클릭한다.좌측의 Preview 버튼
을 클릭하면 변수의 생성 전후를 비교할 수 있다.
2번째 동업자에게 할당된 배당 비율도 expenseRate로 바뀌게 됨을 확인할 수 있다.
배당 비율은 비용 비율과 다르기 때문에 취소한다.
캡쳐가 안되서 강의사진을 가져왔다.
변수로 지정하고자 하는 값을 지우고 이름을 바로 입력하면 에러가 뜨는데, 이클립스에서 변수 생성을 도와준다.
Create local variable
'expenseRate'를 클릭하면 변수를 생성해 준다.
위의 과정을 반복하여 코드를 완성하면, 공급가 값만 바꿔주면 다른 값들은 자동으로 계산됨을 확인할 수 있다.
이렇게 프로그램의 기능은 바꾸지 않으면서 이해하기 쉽게 바꾸는 과정을 리팩토링이라고 한다.
이제 공급가만 바꾸면 다른 값들도 쉽게 계산할 수 있지만, 공급가를 바꾸러면 이클립스를 켜서 바꾸어야 한다.
공급가를 아규먼트로 받아 계산할 수 있도록 해보자.
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = Double.parseDouble(args[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);
}
}
double valueOfSupply = 10000.0;
double valueOfSupply = Double.parseDouble(args[0]);
javac AccountingApp.java
- cd 명령어로 MyApp 프로젝트 폴더로 이동한다.
java AccountingApp 33333.0
- javac 명령어로 AccountingApp.java를 컴파일한다.
java AccountingApp 33333.0
- java 명령어로 AccountingApp을 실행하고 아규먼트로 원하는 공급가액을 입력하여 실행한다.
- 결과가 출력되는 것을 확인할 수 있다.
lauch4j(http://launch4j.sourceforge.net/)와 같은 솔루션을 이용하면 자바 프로그램을 JRE까지 포함한 실행파일로 변환하여, 자바가 깔려있지 않은 컴퓨터라도 애플리케이션을 실행할 수 있게 한다.
부스트코스 쉽게 배우는 자바 1
https://www.boostcourse.org/cs126