카테고리 없음

[Java Study] 나만의 앱 만들기 - 인스턴스 추가

pullwall 2022. 7. 25. 14:59
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