728x90
"인스턴스는 하나의 클래스를 복제하여 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것이다."
class Accounting1{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
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 1 : "+getDividend1());
System.out.println("Dividend 2 : "+getDividend2());
System.out.println("Dividend 3 : "+getDividend3());
}
private static double getDividend1() {
return getIncome()*0.5;
}
private static double getDividend2() {
return getIncome()*0.3;
}
private static double getDividend3() {
return getIncome()*0.2;
}
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 Accounting2{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
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 1 : "+getDividend1());
System.out.println("Dividend 2 : "+getDividend2());
System.out.println("Dividend 3 : "+getDividend3());
}
private static double getDividend1() {
return getIncome()*0.5;
}
private static double getDividend2() {
return getIncome()*0.3;
}
private static double getDividend3() {
return getIncome()*0.2;
}
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;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
// Accounting.valueOfSupply = 10000.0;
// Accounting.vatRate = 0.1;
// Accounting.expenseRate = 0.3;
// //...
// Accounting.print();
// //...
// Accounting.valueOfSupply = 20000.0;
// Accounting.vatRate = 0.05;
// Accounting.expenseRate = 0.2;
// Accounting.print();
// //..
// Accounting.valueOfSupply = 10000.0;
// Accounting.vatRate = 0.1;
// Accounting.expenseRate = 0.3;
// Accounting.print();
Accounting1.valueOfSupply = 10000.0;
Accounting1.vatRate = 0.1;
Accounting1.expenseRate = 0.3;
Accounting1.print();
Accounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.05;
Accounting2.expenseRate = 0.2;
Accounting2.print();
}
}
이말인 즉슨, 위 코드에서 알 수 있듯, Accounting 클래스를 서로 다른 값으로 쓰고 싶은데
충돌을 방지하기 위하여 클래스를 복사해서 서로 다른 값, 서로 같은 메소드를 이용하게 하고 있다.
하지만 이 방법은.. 클래스의 메소드를 바꿀려면 복제한 클래스의 모든 메소드를 바꿔줘야 하고..
클래스를 추가할 때 마다 복사를 해야 하는 번거로움이 존재한다.
class Accounting{
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("Dividend 1 : "+getDividend1());
System.out.println("Dividend 2 : "+getDividend2());
System.out.println("Dividend 3 : "+getDividend3());
}
private double getDividend1() {
return getIncome()*0.5;
}
private double getDividend2() {
return getIncome()*0.3;
}
private double getDividend3() {
return getIncome()*0.2;
}
private double getIncome() {
return valueOfSupply-getExpense();
}
private double getExpense() {
return valueOfSupply*expenseRate;
}
private double getTotal() {
return valueOfSupply+getVAT();
}
private 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();
}
}
이를 인스턴스를 이용하여 구현한 것이다.
클래스 앞에 new를 붙여 복사를 하고 복사본을 a1이라고 선언한다. 이 복사본에는 Accounting 형식만 올 수 있다는 뜻.
728x90