언어&프레임워크/Java
클래스와 인스턴스 활용(java)(AccountingApp)
밍풀
2022. 8. 25. 03:35
기존 accountingApp에 클래스 도입하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class accounting{//accounting과 관련없는 다양한 변수와 메소드가 public class에 있다고 가정할때
//따로 클래스를 만들어 줌으로써 코드가 단정해짐
public static double valueOfSupply;
public static double vatRate = 0.1;
public static double getVAT() {
return valueOfSupply * vatRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
}
public class accountingapp {
public static void main(String[] args) {
accounting.valueOfSupply = 10000.0;
System.out.println("Value of supply : " + accounting.valueOfSupply);//출신클래스 표시
System.out.println("VAT : " + accounting.getVAT());
System.out.println("Total : " + accounting.getTotal());
}
}
|
cs |
만약 위의 공급가액(valueofsupply) 같은 클래스의 내부 상태가 한번 세팅이 되면, 그와 관련된 작업이 완전히 다 끝나고 나서야 다른 세팅을 하는 상황이라면, 그냥 클래스 써도 상관없음.
(예를 들어 valueOfSupply = 10000.0 일때 이 내부상태일때 필요한 작업 getVAT(), getTotal()....다 끝내고 나서 valueOfSupply=20000.0 일때 작업을 수행하는 상황인 경우.)
그러나 아래 그림과 같이 한번은 만원일때 공급가액 출력하고, 한번은 2만원일때 공급가액 출력하고, 만원일때 부가세액출력, 2만원일때 부가세액 출력하고.....하는 방식과 같이 클래스 내부상태가 계속해서 변경되어야 하는 경우 비효율적, 버그가 발생할 가능성이 있음.
따라서 별도의 인스턴스를 만들어서 각각의 인스턴스 만의 고유한 상태를 주게 되면 독립된 인스턴스들을 제어가능
부가세율(vatRate) 같은, 어떤 인스턴스건 간에 동일한 클래스 내부 변수는 아래와 같이 static제거하지 않아도 됨, 즉 인스턴스 변수로 만들어줄 필요 없음. 그래야 각각의 인스턴스 실행할 때마다 메모리 또 사용하지 않아도 되기에 효율적. 또, 부가세율이 바뀌었을때 클래스 안에서만 변경하면 모든 인스턴스의 내부의 값이 한번에 변하게 되므로 유지보수에 용이.
인스턴스화 까지 적용한 accountingApp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class accounting{
public double valueOfSupply;
public static double vatRate = 0.1;
public double getVAT() {
return valueOfSupply * vatRate;
}
public double getTotal() {
return valueOfSupply + getVAT();
}
}
public class accountingapp {
public static void main(String[] args) {
accounting a1 = new accounting();
accounting a2 = new accounting();
a1.valueOfSupply = 10000.0;
a2.valueOfSupply = 20000.0;
System.out.println("Value of supply : " + a1.valueOfSupply);
System.out.println("Value of supply : " + a2.valueOfSupply);
System.out.println("VAT : " + a1.getVAT());
System.out.println("VAT : " + a2.getVAT());
System.out.println("Total : " + a1.getTotal());
System.out.println("Total : " + a2.getTotal());
}
}
|
cs |
생성자 this 까지 적용한 accountingApp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
class accounting{
public accounting(double valueOfSupply) {
this.valueOfSupply = valueOfSupply;
}
public double valueOfSupply;
public static double vatRate = 0.1;
public double getVAT() {
return valueOfSupply * vatRate;
}
public double getTotal() {
return valueOfSupply + getVAT();
}
}
public class accountingapp {
public static void main(String[] args) {
accounting a1 = new accounting(10000.0);
accounting a2 = new accounting(20000.0);
System.out.println("Value of supply : " + a1.valueOfSupply);
System.out.println("Value of supply : " + a2.valueOfSupply);
System.out.println("VAT : " + a1.getVAT());
System.out.println("VAT : " + a2.getVAT());
System.out.println("Total : " + a1.getTotal());
System.out.println("Total : " + a2.getTotal());
}
}
|
cs |