본문 바로가기

Programming/자바

생활코딩 자바 리뉴얼 13. 나의 앱 만들기

https://www.youtube.com/watch?v=mphrv80VaQI&list=PLuHgQVnccGMAIluRRVsC1e79ri-dwnBmR&index=39 

 

이름 바꾸기 : 오른쪽 버튼 - refactor - extract local variable  => alt + shift + L

 

변수 설정


public class accountingappp {

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 = (valueofsupply - expense*0.5);
double dividend2 = (valueofsupply - expense*0.3);
double dividend3 = (valueofsupply - expense*0.2);


System.out.println("Value of supply : " + valueofsupply);
System.out.println("VAT : " + vat);
System.out.println("Total : " + total) ;
System.out.println("Expense : " + vat) ;
System.out.println("Income : " + income ) ;
System.out.println("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3);


}

}

 

입력값 도입

 


public class accountingappp {

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 = (valueofsupply - expense*0.5);
double dividend2 = (valueofsupply - expense*0.3);
double dividend3 = (valueofsupply - expense*0.2);


System.out.println("Value of supply : " + valueofsupply);
System.out.println("VAT : " + vat);
System.out.println("Total : " + total) ;
System.out.println("Expense : " + vat) ;
System.out.println("Income : " + income ) ;
System.out.println("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3);


}

}

 

 

run - run configurations - arguments 에 입력값 적기

 

Launch4J 소프트웨어 이용 시 자바 미이용 사용자도 사용 가능

 

 

조건문(if)

 

public class accountingapppif {

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 : " + vat) ;
System.out.println("Income : " + income ) ;
System.out.println("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3);

}
}

 

 

=> 처음에 계속 arguments에 5000 입력해도 5:3:1 비율이 떠서 뭔가 했는데 run configuration 들어가니 main class 가 이전 파일로 돼있었다 변경하니 반영됨 휴

 

 

배열(같은 카테고리 값 정리정돈)


public class accountingarrayappp {

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];
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 : " + vat) ;
System.out.println("Income : " + income ) ;
System.out.println("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3);


}

}

 

반복문(반복되는 구조 한 줄로 축약하기)


public class accountingarrayloopappp {

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 : " + vat) ;
System.out.println("Income : " + income ) ;

double[] dividendrates = new double[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]);

int i =0;
while(i < dividendrates.length) {
System.out.println("Dividend1 : " + income*dividendrates[i] );
i = i + 1;
}


}

}

 

메소드(서로 연관된 코드를 그룹핑해서 이름 붙인 정리정돈 상자)

 

  • 메소드화
    public class accountingmethodappp {

    public static double valueofsupply = 10000.0 ;
    public static double vatrate = 0.1;
    public static void main(String[] args) {

    double expenserate = 0.3;
    double vat = getvat();
    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 : " + vat) ;
    System.out.println("Income : " + income ) ;
    System.out.println("Dividend1 : " + dividend1 );
    System.out.println("Dividend2 : " + dividend2 );
    System.out.println("Dividend3 : " + dividend3);


    }

    private static double getvat() {
    return valueofsupply * vatrate;
    }

    }

 

=> 메소드화 하려는 코드 블록 후 오른쪽 마우스 - refactor - extract method

 

  • 지역변수 전역변수로 convert



public class accountingmethodappp {

public static double valueofsupply;
public static double vatrate;

public static void main(String[] args) {

vatrate = 0.1;
valueofsupply = 10000.0;
double expenserate = 0.3;
double vat = getvat();
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 : " + vat) ;
System.out.println("Income : " + income ) ;
System.out.println("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3);


}

private static double getvat() {
return valueofsupply * vatrate;
}

}

 

 

=> 코드 블록 후 오른쪽 마우스 - refactor - convert local variable to field...

 

 

  • 전반적 메소드화


public class accountingmethodappp {

public static double valueofsupply;
public static double vatrate;
public static double expenserate;

public static void main(String[] args) {

vatrate = 0.1;
valueofsupply = 10000.0;
expenserate = 0.3;

print();


}

private 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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

private static double getdividend3() {
return getincome()*0.2;
}
private static double getdividend2() {
return getincome()*0.3;
}
private static double getdividend1() {
return getincome()*0.5;
}

private static double getincome() {
return valueofsupply - getexpense();
}

private static double getexpense() {
return valueofsupply * expenserate;
}

private static double gettotal() {
return valueofsupply + getvat();
}

private static double getvat() {
return valueofsupply * vatrate;
}

}

 

클래스(서로 연관된 변수, 메소드 그룹핑&연결)

 

class accountingg{
public static double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public static double getdividend3() {
return getincome()*0.2;
}
public static double getdividend2() {
return getincome()*0.3;
}
public static double getdividend1() {
return getincome()*0.5;
}

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 accountingclassappp {

public static void main(String[] args) {

accountingg.vatrate = 0.1;
accountingg.valueofsupply = 10000.0;
accountingg.expenserate = 0.3;

print();

}}}



인스턴스(하나의 클래스를 복제-> 서로 다른 데이터값과 서로 같은 메소드값을 가진 복제본 생성)

 

class accountingg{
public static double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public static double getdividend3() {
return getincome()*0.2;
}
public static double getdividend2() {
return getincome()*0.3;
}
public static double getdividend1() {
return getincome()*0.5;
}

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 accountingclassappp {

public static void main(String[] args) {

accountingg.valueofsupply = 10000.0;
accountingg.vatrate = 0.1;
accountingg.expenserate = 0.3;
accountingg.print();
//...
accountingg.valueofsupply = 20000.0;
accountingg.vatrate = 0.05;
accountingg.expenserate = 0.2;
accountingg.print();
//..
accountingg.valueofsupply = 10000.0;
accountingg.vatrate = 0.1;
accountingg.expenserate = 0.3;
accountingg.print();
//..  
}}}

 => 클래스 내부 상태 변화 많아 버그 유발 가능성 높아짐

 

  • 클래스 복제-> 하나의 클래스 돌려막기 대신 여러 복제클래스 따로 사용

class accountingg1{
public static double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public static double getdividend3() {
return getincome()*0.2;
}
public static double getdividend2() {
return getincome()*0.3;
}
public static double getdividend1() {
return getincome()*0.5;
}

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 accountingg2{
public static double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public static double getdividend3() {
return getincome()*0.2;
}
public static double getdividend2() {
return getincome()*0.3;
}
public static double getdividend1() {
return getincome()*0.5;
}

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 accountingclassappp {

public static void main(String[] args) {

accountingg1.valueofsupply = 10000.0;
accountingg1.vatrate = 0.1;
accountingg1.expenserate = 0.3;
accountingg1.print();
//...
accountingg2.valueofsupply = 20000.0;
accountingg2.vatrate = 0.05;
accountingg2.expenserate = 0.2;
accountingg2.print();
//..

}}}

  • 클래스 복제 단순화

class accountingg{
public static double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public static double getdividend3() {
return getincome()*0.2;
}
public static double getdividend2() {
return getincome()*0.3;
}
public static double getdividend1() {
return getincome()*0.5;
}

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 accountingclassappp {

public static void main(String[] args) {

// accountingg1.valueofsupply = 10000.0;
// accountingg1.vatrate = 0.1;
// accountingg1.expenserate = 0.3;
// accountingg1.print();
// //...
// accountingg2.valueofsupply = 20000.0;
// accountingg2.vatrate = 0.05;
// accountingg2.expenserate = 0.2;
// accountingg2.print();
// //..
//

accountingg a1 = new accountingg();
a1.valueofsupply = 10000.0;
a1.vatrate = 0.1;
a1.expenserate = 0.3;
a1.print();

accountingg a2 = new accountingg();
a2.valueofsupply = 10000.0;
a2.vatrate = 0.1;
a2.expenserate = 0.3;
a2.print();

}}}

=> a1, a2 는 인스턴스

 

  • static 키워드 삭제

class accountingg{
public  double valueofsupply;
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("Dividend1 : " + getdividend1() );
System.out.println("Dividend2 : " + getdividend2() );
System.out.println("Dividend3 : " + getdividend3());
}

public  double getdividend3() {
return getincome()*0.2;
}
public  double getdividend2() {
return getincome()*0.3;
}
public  double getdividend1() {
return getincome()*0.5;
}

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 accountingclassappp {

public  void main(String[] args) {

accountingg a1 = new accountingg();
a1.valueofsupply = 10000.0;
a1.vatrate = 0.1;
a1.expenserate = 0.3;
a1.print();


accountingg a2 = new accountingg();
a2.valueofsupply = 10000.0;
a2.vatrate = 0.1;
a2.expenserate = 0.3;
a2.print();

}}}