[부스트코스/쉽게 배우는 자바 1] 14. 나의 앱 만들기(1) - 기본 기능 구현, 변수와 입력값 도입

zzzzsb·2021년 2월 27일
0

부스트코스 쉽게 배우는 자바 1


Chaper 14


14-1. 나의 앱 만들기_오리엔테이션

지금 까지 배운 자바의 내용만으로도 많은 것을 할 수 있다.
하지만 문제해결에 있어 배운 내용만으로 부족한 시간이 오기도 한다.
이러한 불편함을 해소하기 위해 우리는 지식을 공부해야하고, 이를 프로젝트에 반영해야 한다.

최소한으로 공부하고 최대한으로 일하자.
그리고 이것을 반복하자.

그렇게 하면 공부와 일의 경계는 점점 사라질 것이고,
일하면서 공부하고 공부하면서 일하는 중급자가 되어있을 것이다.

지식은 골목골목을 분기하는 네트워크의 형상을 하고있다.
그렇기 때문에 우리가 원하는 지점에 도달하기 위해서 가장 중요한 것은 경로를 선택하는 일이다.

최소로 공부하고 최대의 결과를 내라, 가장 기억에 남는 말이다.

지금은 초급자인 나이지만, 중급자가 되려면 오늘과 같은 과정을 수없이 많이 반복해야 할 것이다.

공부를 하면 할수록 이론에서 그치는 것이 아닌 실습과 적용이 중요하다고 느껴진다.

우리의 문제 현상은 무엇인가?

강사님께서 소개한 예시 사진을 첨부하였다.

위와 같은 상황에서 돈의 흐름을 빠르게 계산해야 하는 문제가 있다.
계산기를 두드리자니 손이 너무 많이가고, 프로그램을 이용하자니 너무 복잡한 것 같다.
우리가 배운 자바를 이용해서 이 문제를 해결해 보자.

우선, 우리가 해야할 일은 현실을 분석하는 것이다.
판매자인 우리는 소비자에게 물건을 공급할 때 공급가(Value of supply)를 받는다.
그리고 공급가의 10% 만큼 소비자는 부가가치세(Value added tax)를 더 지불하고, 판매자는 국세청에 부가가치세를 납부한다.
이때 물건을 판매하기까지 30%의 비용이 들고 나머지 70%가 이익이라고 할때, 이익은 투자한 동업자들에게 5:3:2의 비율로 배당한다.

이 문제를 자바로 어떻게 해결할 수 있을까?


14-2. 나의 앱 만들기_기본 기능 구현


문제를 정의하고 나면, 문제를 해결해야 한다.
프로그램은 시간의 순서에 따라 작업을 실행한다.
우선 내가 알고있는 기능만을 이용해서 문제를 해결해보자.

MyApp 만들기

  • 위의 문제를 해결하기 위해 새 프로젝트를 생성해 보자.
  • 프로젝트의 이름은 MyApp으로 한다.

  • 만든 프로젝트에 AccountingApp 클래스를 생성하고, 물건을 판매하며 이루어지는 여러 계산을 알아본다.

AccountingApp.java 소스코드

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);

	}

}

AccountingApp.java 소스코드 분석

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이다.

AccountingApp.java 소스코드 출력 결과


만약 공급가인 10000.0을 다른 값으로 교체하고 싶다면, 어떻게 해야할까?
이클립스 코드에서 공급가인 10000.0 부분을 드래그하고,

  • 상단 툴바에서 Search 버튼 을 클릭한다.
  • 이건 해봤는데 안돼서... 찾아보고 다시 수정해야 겠다.

  • 또는 이클립스의 Edit-Find/Replace 를 클릭한다.

  • 변경할 값을 입력하고 Replace All 을 클릭한다.

  • 입력한 숫자대로 공급가가 교체된 것을 확인할 수 있다.

14-3. 나의 앱 만들기_변수도입

위의 코드에서 변수를 적용해 고쳐보자.
변수는 코드의 재사용성을 높이고 의미있는 이름을 붙여 코드의 가독성을 높일 수 있다.

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);
 
    }
 
}

이클립스에서 특정 값을 지역 변수로 바꾸기

  • 바꿀 숫자를 드래그한 상태에서 우클릭-Refactor-Extract Local Variable.. 을 클릭한다.

  • 변수의 이름을 지정하고 OK를 누르면 변수가 생성됨을 확인할 수 있다.

주의할 점

  • 좌측의 Preview 버튼을 클릭하면 변수의 생성 전후를 비교할 수 있다.

  • 2번째 동업자에게 할당된 배당 비율도 expenseRate로 바뀌게 됨을 확인할 수 있다.

  • 배당 비율은 비용 비율과 다르기 때문에 취소한다.

  • 캡쳐가 안되서 강의사진을 가져왔다.

  • 변수로 지정하고자 하는 값을 지우고 이름을 바로 입력하면 에러가 뜨는데, 이클립스에서 변수 생성을 도와준다.

  • Create local variable 'expenseRate'를 클릭하면 변수를 생성해 준다.

위의 과정을 반복하여 코드를 완성하면, 공급가 값만 바꿔주면 다른 값들은 자동으로 계산됨을 확인할 수 있다.

이렇게 프로그램의 기능은 바꾸지 않으면서 이해하기 쉽게 바꾸는 과정을 리팩토링이라고 한다.


14-4. 나의 앱 만들기_입력값 도입

이제 공급가만 바꾸면 다른 값들도 쉽게 계산할 수 있지만, 공급가를 바꾸러면 이클립스를 켜서 바꾸어야 한다.

공급가를 아규먼트로 받아 계산할 수 있도록 해보자.

AccountingApp.java 소스코드

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]);
  • 위 코드를 아래와 같이 수정해 준다.
  • 입력하는 args[0] 값은 String 이기 때문에 계산을 위해 Double 로 변환해주어야 한다.

터미널에서 실행하기

javac AccountingApp.java

  • cd 명령어로 MyApp 프로젝트 폴더로 이동한다.

java AccountingApp 33333.0

  • javac 명령어로 AccountingApp.java를 컴파일한다.

java AccountingApp 33333.0

  • java 명령어로 AccountingApp을 실행하고 아규먼트로 원하는 공급가액을 입력하여 실행한다.
  • 결과가 출력되는 것을 확인할 수 있다.

만약 실행하려는 컴퓨터에 자바조차 깔려있지 않다면..


lauch4j(http://launch4j.sourceforge.net/)와 같은 솔루션을 이용하면 자바 프로그램을 JRE까지 포함한 실행파일로 변환하여, 자바가 깔려있지 않은 컴퓨터라도 애플리케이션을 실행할 수 있게 한다.


부스트코스
https://www.boostcourse.org/opencourse

부스트코스 쉽게 배우는 자바 1
https://www.boostcourse.org/cs126


profile
성장하는 developer

0개의 댓글