자바 어플리케이션을 하나 만들어보자!

Edit->Find/Replace에서 값을 다른 값으로 변환할 수 있다.
먼저 처음에는 변수 없이 코딩을 해보자.
public class AccountingApp {
public static void main(String[] args) {
System.out.println("Value of supply : "+12345.0); //공급가
System.out.println("VAT : "+(12345.0*0.1)); //부가가치세
System.out.println("Total : "+(12345.0+12345.0*0.1));//소비자가낼돈
System.out.println("Expense : "+(12345.0*0.3)); //비용
System.out.println("Income : "+(12345.0-12345.0*0.3));//이익
System.out.println("Dividend : "+(12345.0-12345.0*0.3)*0.5);//배당 1
System.out.println("Dividend : "+(12345.0-12345.0*0.3)*0.3);//배당 2
System.out.println("Dividend : "+(12345.0-12345.0*0.3)*0.2);//배당 3
}
}
대체 똑같은 값을 몇번이나 적은건지!
불편한 점이 나와야 개선을 할 수 있다.
이제는 변수를 도입해보자.

이클립스에는 아까 위의 12345.0 수 위에 우클릭을 하면
Refactor->Extract Local variable로
변수로 한번에 치환할 수 있다. 엄청난 기능! (Shift+Alt+L)
지금봤는데 저 위의 사진에서 부가가치세 +가 아니고 *입니다..

일괄 변경할 때 preview를 보면 어떻게 변할지 미리 확인할 수 있다.
0.3을 expense로 바꾸려고 하니 저 빨간 부분은 분배 비율이지 expense가 아니다.
그러므로 이것은 수동으로 바꿔주자..
그리고 댓글을 통해 알게된 엄청 좋은 단축키가 하나 더 있다!
ALT+방향키 를 하면 해당 줄을 원하는 위치로 옮길 수 있다!!!
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 : "+dividend1);//배당 1
System.out.println("Dividend : "+dividend2);//배당 2
System.out.println("Dividend : "+dividend3);//배당 3
}
}
변수를 도입해서 좋으나, 사용자의 값을 입력받을 수 없는 점이 불편하다!!!
그러므로 이번엔 입력값 도입을 하자~
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 : "+dividend1);//배당 1
System.out.println("Dividend : "+dividend2);//배당 2
System.out.println("Dividend : "+dividend3);//배당 3
}
}
args는 String 타입이므로
Double.parseDouble을 통해 Double타입으로 형 변환을 해주자.
그 다음 터미널을 켜서 터미널을 통해 해당 프로그램을 실행해보자.

class 파일을 실행해보자~ (AccountingApp.class)
나는 오류가 떠서
해당 티스토리를 참고하고 다시 컴파일하고 실행시켰다

마지막에 꼭 인자를 써주자~~
하지만 다른 컴퓨터에서는 AccountingApp.class를 실행시키고 싶은데
다른 컴퓨터에 jvm이 설치되어있어야 한다는 것이다..!!!!
jvm을 설치안하고 실행시키고 싶다면 launch4j를 이용하면 된다고 한다.
해당 프로젝트에 조건문을 도입해보자.
만약 이익이 만원보다 작을 경우, 첫번째 사람이 이익을 다가지고
그렇지 않으면 5대 3대 2로 나눈다고 가정하자.
public class AccountingIFApp {
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;
double dividend2;
double dividend3;
if(income>10000.0) {
dividend1 = income*0.5;
dividend2 = income*0.3;
dividend3 = income*0.2;
}
else {
dividend1 = income*1.0;
dividend2 = income*0;
dividend3 = income*0;
}
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 : "+dividend1);//배당 1
System.out.println("Dividend : "+dividend2);//배당 2
System.out.println("Dividend : "+dividend3);//배당 3
}
}

입력값을 설정안해주면 오류가 난다.

이렇게 두개 만들어서 실행시켜주자.

공급가가 5만일때

공급가가 5천일때
배열을 이용해보자.
분배 비율을 배열을 이용해 저장하여 무엇을 의미하는지 알 수 있도록 하자.
public class AccountingArrayApp {
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[] dividendRates=new double[3]; //size 3
dividendRates[0]=0.5;
dividendRates[1]=0.3;
dividendRates[2]=0.2;
double dividend1 = income*dividendRates[0];
double dividend2 = income*dividendRates[1];
double dividend3 = income*dividendRates[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 : "+dividend1);//배당 1
System.out.println("Dividend : "+dividend2);//배당 2
System.out.println("Dividend : "+dividend3);//배당 3
}
}


배열은 서랍장과 같은 역할을 한다.
실행하면 이전과 같은 결과지만 훨씬 편하게 된다.
하지만 for문을 쓰면 더 편할거같은데...
반복문을 사용해보자.
배열과 반복문은 함께 쓰면 폭발적인 효과가 나타난다.
public class AccountingArrayLoopApp {
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;
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);//이익
double[] dividendRates=new double[3]; //size 3
dividendRates[0]=0.5;
dividendRates[1]=0.3;
dividendRates[2]=0.2;
int i=0;
while(i<dividendRates.length) {
System.out.println("Dividend : "+income*dividendRates[i]);
i=i+1;
}
}
}

한 줄 짜리가
dividendRates.length 의 크기 만큼 반복되게 된다. 즉 3번 출력된다.
메소드는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자이다.
부가가치세 계산 코드를 메소드로 만들어보자.

아까 사용했던 Shift+ALT+L과 비슷하게
Shift+ALT+M을 하면 메소드로 변환해준다.
자바에서는 전역변수를 필드라고 한다.
public class AccountingMethodApp {
public static double valueOfSupply; //global variable(Field)
public static double vatRate;
public static double expenseRate;
public static void main(String[] args) {
valueOfSupply = 10000.0;
vatRate = 0.1;
expenseRate = 0.3;
print();
}
public static void print() {
System.out.println("Value of supply : "+valueOfSupply); //공급가
System.out.println("VAT : "+getVAT()); //부가가치세
System.out.println("Total : "+getTotal());//소비자가낼돈
System.out.println("Expense : "+getExpense()); //비용
System.out.println("Income : "+getIncome());//이익
System.out.println("Dividend : "+getDividend1());//배당 1
System.out.println("Dividend : "+getDividend2());//배당 2
System.out.println("Dividend : "+getDividend3());//배당 3
}
public static double getDividend1() {
return getIncome()*0.5;
}
public static double getDividend2() {
return getIncome()*0.3;
}
public static double getDividend3() {
return getIncome()*0.2;
}
public static double getIncome() {
return valueOfSupply-getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply+getVAT();
}
public static double getVAT() {
return valueOfSupply*vatRate;
}
}
메소드를 사용하니 진짜 훨씬 깔끔한 코드가 되었다.
와우!
클래스는 서로 연관된 변수와 메소드를 그룹핑한것이고, 그곳에 이름을 붙인것이다!
class Accounting{
public static double valueOfSupply; //global variable(Field)
public static double vatRate;
public static double expenseRate;
public static void print() {
System.out.println("Value of supply : "+valueOfSupply); //공급가
System.out.println("VAT : "+getVAT()); //부가가치세
System.out.println("Total : "+getTotal());//소비자가낼돈
System.out.println("Expense : "+getExpense()); //비용
System.out.println("Income : "+getIncome());//이익
System.out.println("Dividend : "+getDividend1());//배당 1
System.out.println("Dividend : "+getDividend2());//배당 2
System.out.println("Dividend : "+getDividend3());//배당 3
}
public static double getDividend1() {
return getIncome()*0.5;
}
public static double getDividend2() {
return getIncome()*0.3;
}
public static double getDividend3() {
return getIncome()*0.2;
}
public static double getIncome() {
return valueOfSupply-getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply+getVAT();
}
public static double getVAT() {
return valueOfSupply*vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();
//anotherVariable =...;
//anotherMethod=...;
}
}
Accounting 클래스에 변수와 메소드를 넣어서
Accounting.~~ 를 통해 main문에서 호출을 해보았다!!
하지만 클래스 인스턴스를 따로 만들어서 호출하는것도 편할것같은데..
인스턴스는 하나의 클래스를 복제해서 서로 다른 데이터의 값과
서로 같은 메소드를 가진 복제본을 만드는 것이다.
class Accounting{
public double valueOfSupply; //global variable(Field)
public double vatRate;
public double expenseRate;
public void print() {
System.out.println("Value of supply : "+valueOfSupply); //공급가
System.out.println("VAT : "+getVAT()); //부가가치세
System.out.println("Total : "+getTotal());//소비자가낼돈
System.out.println("Expense : "+getExpense()); //비용
System.out.println("Income : "+getIncome());//이익
System.out.println("Dividend : "+getDividend1());//배당 1
System.out.println("Dividend : "+getDividend2());//배당 2
System.out.println("Dividend : "+getDividend3());//배당 3
}
public double getDividend1() {
return getIncome()*0.5;
}
public double getDividend2() {
return getIncome()*0.3;
}
public double getDividend3() {
return getIncome()*0.2;
}
public double getIncome() {
return valueOfSupply-getExpense();
}
public double getExpense() {
return valueOfSupply*expenseRate;
}
public double getTotal() {
return valueOfSupply+getVAT();
}
public double getVAT() {
return valueOfSupply*vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
//instance
Accounting a1=new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();
Accounting a2=new Accounting();
a2.valueOfSupply = 20000.0;
a2.vatRate = 0.05;
a2.expenseRate = 0.2;
a2.print();
a1.print();
}
}
클래스를 복제한 인스턴스를 통해 같은 클래스를 통해 다른 값을 줄 수 있다.
그렇게 되면 static을 지워야 해서 위의 클래스
아래 변수들과 메소드들의 static을 지워야한다!

다음은 Java 제어문에 대해서 공부해보려고 한다!