자바 어플리케이션
을 하나 만들어보자!
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 제어문
에 대해서 공부해보려고 한다!