티스토리 뷰
지지난, 지난 포스팅에 이어서 나의 앱 만들기 마지막 포스팅 시간이다.
저번 포스팅까지 Class에 대해서 알아보았다. 그럼 이제 Instance가 무엇인지에 대해서 간단하게 알아보자.
우선 저번 포스팅에서 작성했던 코드를 가져와 보자.
class Accounting{
public static double ValueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double[] Dividend;
public static double getDividend(double DividentRate){
return getIncome() * DividentRate;
}
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 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());
for(int i = 0; i < Dividend.length; i++){
System.out.println("Dividend "+ (i+1) + " : " + getDividend(Dividend[i]));
}
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accounting.ValueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.Dividend = new double[] {0.5, 0.3, 0.2};
Accounting.print();
}
}
사실 코드를 수정할 부분은 없고, Class를 어떻게 Instance화 하는지에 대해 살펴볼 것이다.
지금 우리는 특정 물건 하나에 대해서만 적용을 해왔다.
다시 처음으로 돌아가서 우리는 치킨집을 운영하고 있다. 치킨의 종류는 천차만별이고, 각 치킨마다 가격도 다를 것이다.
그렇다면 각기 다른 제품들에 대해서 동일한 계산을 해야 한다고 하면 어떻게 해야 할까?
우리가 지금까지 학습한 내용으로는 Class를 치킨의 종류만큼 만드는 것이다.
그렇게 하면 (각 치킨의 종류.method)를 통해서 서로 다른 제품에 대한 계산을 할 수 있을 것이다.
하지만, 치킨의 종류가 10가지.. 100가지 늘어난다면.. 이는 역시 굉장히 비효율적인 방법이다.
즉,, Instance를 도입할 필요가 생긴 것이다!
Instance 적용
Instance를 짧게 설명하자면, class를 복제하는 것이다.
복제된 class를 이용하여 더 편리하고 버그가 적은 코딩을 할 수 있게 되는 것이다.
가령, Accounting class에서
Accounting A1 = new Accounting();
위와 같은 코드를 작성한다는 것은 Accounting class를 A1이라는 변수 안에 복제한 것이다.
코드를 뜯어서 다시 살펴보면 아래와 같다.
new Accounting() : Accounting class를 복제
A1 : 복제된 무엇 (instance)를 담는 변수
Accounting : 무엇 (instance) 에 Accounting의 복제 본만 들어올 수 있도록 명시
이를 이용해서 Instance화 하여 코드를 다시 작성해보면, ( 여러 가지 제품에 대해 적용한 )
class InstanceAccounting{
public double ValueOfSupply;
public double vatRate;
public double expenseRate;
public double[] Dividend;
public double getDividend(double DividentRate){
return getIncome() * DividentRate;
}
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 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());
for(int i = 0; i < Dividend.length; i++){
System.out.println("Dividend "+ (i+1) + " : " + getDividend(Dividend[i]));
}
}
}
public class AccountingInstanceApp {
public static void main(String[] args) {
InstanceAccounting A1 = new InstanceAccounting();
InstanceAccounting A2 = new InstanceAccounting();
System.out.println("Case 1 : 후라이드 치킨");
A1.ValueOfSupply = 10000.0;
A1.vatRate = 0.1;
A1.expenseRate = 0.3;
A1.Dividend = new double[] {0.5, 0.3, 0.2};
A1.print();
System.out.println("\nCase 2 : 양념 치킨");
A2.ValueOfSupply = 15000.0;
A2.vatRate = 0.1;
A2.expenseRate = 0.3;
A2.Dividend = new double[] {0.5, 0.3, 0.2};
A2.print();
}
}
Instance를 생성하여 원하는 만큼 서로 다른 제품에 대해서 class를 적용시킬 수 있다.
따라서, 우리가 하려고 했던, 여러가지 치킨들에 대해서 원하는 회계적인 계산을 할 수 있게 된 것이다.
여기서 역시 한 가지 주의할 점은 Instance화를 하기 위해서는 Class의 아래 Method의 static Keyword를
제거해주어야 한다는 점이다.
이렇게 해서 3단계에 이르는 Method, Class, Instnace에 대해서 알아보았다.
물론 정확한 개념적인 부분은 설명하지는 않았지만, 적어도 어떠한 맥락에서 어떠한 필요성에 의해서
이러한 개념이 등장했는지는 알 수 있는 좋은 기회가 되었으면 한다.
읽어주셔서 감사합니다. 😍
포스팅의 모든 학습 내용은 생활코딩의 Java1 수업의 출처임을 밝힙니다.
'프로그래밍 > Java 기초' 카테고리의 다른 글
| Java(12), 객체 지향 프로그래밍 (0) | 2020.11.28 |
|---|---|
| Java(11-2), 나의 앱 만들기 (Feat. Class) (0) | 2020.08.19 |
| Java(11-1), 나의 앱 만들기 (Feat. Method) (0) | 2020.08.18 |
| Java(10-1), 배열 for - each (0) | 2020.04.13 |
| Java(10), 배열 (0) | 2020.04.10 |