JAVA1을 듣고 myApp을 만들어보았다.
public class accountingApp {
public static void main(String[] args){
// 공급가
double valueOfSupply = 12345.0;
// 세금
double vatRate = 0.1;
// 지출 비율
double expenseRate = 0.3;
// 수익
double income = (valueOfSupply - valueOfSupply*expenseRate);
// 지출
double expense = (valueOfSupply*expenseRate);
// 공급가 + VAT = Total
double total = (valueOfSupply + valueOfSupply*vatRate);
// 부가 가치세
double vat = (valueOfSupply*vatRate);
// 1번 투자자에게 배당금
double devidend1 = (valueOfSupply - valueOfSupply*expenseRate) * 0.5;
// 2번 투자자에게 배당금
double devidend2 = (valueOfSupply - valueOfSupply*expenseRate) * 0.3;
// 3번 투자자에게 배당금
double devidend3 = (valueOfSupply - valueOfSupply*expenseRate) * 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("Income : "+ devidend1);
System.out.println("Income : "+ devidend2);
System.out.println("Income : "+ devidend3);
}
}
메소드 도입
public class accountingMethodApp {
//vauleOfSupply, vatRate 전역 변수로 생성
public static double valueOfSupply = 12345.0;
public static double vatRate = 0.1 ;
public static double expenseRate = 0.3;
public static void main(String[] args){
// 수익
double income = getIncome();
// 지출
double expense = getExpense();
// 공급가 + VAT = Total
double total = getTotal();
// 부가 가치세
//double vat = (valueOfSupply*vatRate);
double vat = getVat();
// 1번 투자자에게 배당금
double devidend1 = getDiviend1();
// 2번 투자자에게 배당금
double devidend2 = getDiviend2();
// 3번 투자자에게 배당금
double devidend3 = getDiviend3();
print();
}
public static double getVat (){
return valueOfSupply * vatRate;
}
public static double getIncome (){
return valueOfSupply - getExpense();
}
public static double getExpense (){
return valueOfSupply * expenseRate;
}
public static double getTotal (){
return valueOfSupply * getVat();
}
public static double getDiviend1 (){
return getIncome() * 0.5;
}
public static double getDiviend2 (){
return getIncome() * 0.3;
}
public static double getDiviend3 (){
return getIncome() * 0.2;
}
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("Income : "+ getDiviend1());
System.out.println("Income : "+ getDiviend2());
System.out.println("Income : "+ getDiviend3());
}
}
객체는, 클래스는 서로 연관된 변수와 메소드를 그룹화하여 명명한 것이다.
클래스는 뼈대 같은 느낌쓰
메소드가 도입된 코드에 클래스를 도입해 보았다.
Structure로 어떤 멤버들 리스트 (클래스 안에 소속된 변수 또는 메소드들) 확인!
class Accouting{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double getVat (){
return valueOfSupply * vatRate;
}
public static double getIncome (){
return valueOfSupply - getExpense();
}
public static double getExpense (){
return valueOfSupply * expenseRate;
}
public static double getTotal (){
return valueOfSupply * getVat();
}
public static double getDiviend1 (){
return getIncome() * 0.5;
}
public static double getDiviend2 (){
return getIncome() * 0.3;
}
public static double getDiviend3 (){
return getIncome() * 0.2;
}
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("Income : "+ getDiviend1());
System.out.println("Income : "+ getDiviend2());
System.out.println("Income : "+ getDiviend3());
}
}
public class accountingClassApp {
// 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
// Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
public static void main(String[] args){
// 공급가
Accouting.valueOfSupply = 12345.0;
// 세금
Accouting.vatRate = 0.1;
// 지출 비율
Accouting.expenseRate = 0.3;
// 수익
Accouting.print();
}
}
여기서 인스턴스 개념을 추가해 보았다(생활코딩님이 ㅋ)
인스턴스는 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것이다.
만약 어쩌다 한 번 세금(Accouting.vatRate)이나 지출 비용(Accouting.expenseRate)이 달라지면?
클래스의 내부의 상태를 변화시키면 버그를 유발할 가능성이 크다.
ex)
public static void main(String[] args){
Accouting.valueOfSupply = 12345.0;
Accouting.vatRate = 0.1;
Accouting.expenseRate = 0.3;
Accouting.valueOfSupply = 20000.0;
Accouting.vatRate = 0.2;
Accouting.expenseRate = 0.5;
Accouting.valueOfSupply = 33000.0;
Accouting.vatRate = 0.8;
Accouting.expenseRate = 0.1;
}
-> 클래스를 복제해 봄
class Accouting1{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double getVat (){
return valueOfSupply * vatRate;
}
public static double getIncome (){
return valueOfSupply - getExpense();
}
public static double getExpense (){
return valueOfSupply * expenseRate;
}
public static double getTotal (){
return valueOfSupply * getVat();
}
public static double getDiviend1 (){
return getIncome() * 0.5;
}
public static double getDiviend2 (){
return getIncome() * 0.3;
}
public static double getDiviend3 (){
return getIncome() * 0.2;
}
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("Income : "+ getDiviend1());
System.out.println("Income : "+ getDiviend2());
System.out.println("Income : "+ getDiviend3());
}
}
class Accouting2{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double getVat (){
return valueOfSupply * vatRate;
}
public static double getIncome (){
return valueOfSupply - getExpense();
}
public static double getExpense (){
return valueOfSupply * expenseRate;
}
public static double getTotal (){
return valueOfSupply * getVat();
}
public static double getDiviend1 (){
return getIncome() * 0.5;
}
public static double getDiviend2 (){
return getIncome() * 0.3;
}
public static double getDiviend3 (){
return getIncome() * 0.2;
}
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("Income : "+ getDiviend1());
System.out.println("Income : "+ getDiviend2());
System.out.println("Income : "+ getDiviend3());
}
}
public class accountingClassApp {
// 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
// Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
public static void main(String[] args){
Accouting1.valueOfSupply = 12345.0;
Accouting1.vatRate = 0.1;
Accouting1.expenseRate = 0.3;
Accouting1.print();
Accouting2.valueOfSupply = 20000.0;
Accouting2.vatRate = 0.2;
Accouting2.expenseRate = 0.5;
Accouting2.print();
}
}
서로 다른 상태, 서로 같은 메소드를 갖게 함
복제된 클래스를 이용하여 더 버그가 적은 코딩이 가능하게 함
하지만 코드가 너무 길어지고 복제한 클래스의 메소드 변경이 번거로움
인스턴스를 선언해서 클래스의 복제를 막아줌
class Accouting{
public double valueOfSupply;
public double vatRate;
public double expenseRate;
public double getVat (){
return valueOfSupply * vatRate;
}
public double getIncome (){
return valueOfSupply - getExpense();
}
public double getExpense (){
return valueOfSupply * expenseRate;
}
public double getTotal (){
return valueOfSupply * getVat();
}
public double getDiviend1 (){
return getIncome() * 0.5;
}
public double getDiviend2 (){
return getIncome() * 0.3;
}
public double getDiviend3 (){
return getIncome() * 0.2;
}
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("Income : "+ getDiviend1());
System.out.println("Income : "+ getDiviend2());
System.out.println("Income : "+ getDiviend3());
}
}
public class accountingClassApp {
// 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
// Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
public static void main(String[] args){
Accouting a1 = new Accouting();
a1.valueOfSupply = 12345.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();
Accouting a2 = new Accouting();
a2.valueOfSupply = 10000.0;
a2.vatRate = 0.2;
a2.expenseRate = 0.5;
a2.print();
// accounting Class에서 쓰인 static은 쓸 수 없음, 지워줘야함
}
}
static 왜 쓰면 안되는지 안말해줌 찾아봤는데 ㅎ..
https://unabated.tistory.com/1041