728x90
어떨 때에 인스턴스를 쓰는게 좋을까?
<클래스화를 계속 써야할 상황>
1)공급가액 파라미터가 한번 세팅이 되고나서 내부적 상태가 바뀌지 않고 getVAT(), Total() 같은메소드들로 부가가치세, 총액 같은 값만 받으면 되는 간단한 상태면 클래스 사용하면 된다
또는
2)내부적인 상태가 한번 세팅이되면 여러 작업들이 끝나고 그 다음에 새로운 내부적인 상태가 변화가 오는 케이스에서도 클래스를 인스턴스화 시킬 필요는 없다고 본다
<인스턴스화를 써야할 상황>
그런데 클래스의 상태가 계속 바뀌어야하는 상황이라면?
ex) 공급가액(vauleOfSupply) 1만 세팅에서 2만,3만 등 경우의수가 엄청나게 많아지고 계속 바꿔가면서 써야한다면?
(즉, 클래스의 상태가 계속 바뀌어야하는 상태일 때는?)
Accounting08_2.valueOfSupply = 10000.0;
System.out.println("Value of supply : " + Accounting.valueOfSupply);
System.out.println("VAT : " + Accounting.getVAT());
System.out.println("Total : " + Accounting.getTotal());
Accounting08_2.valueOfSupply = 20000.0;
System.out.println("VAT : " + Accounting.getVAT());
Accounting08_2.valueOfSupply = 50000.0;
System.out.println("VAT : " + Accounting.getVAT());
Accounting08_2.valueOfSupply = 900.0;
System.out.println("Total : " + Accounting.getTotal());
공급가액(vauleOfSupply)이 하나가 아닌 내부적으로 수십개의 값들이 있고 계속 바꿔야한다면 버그 발생 확률 고위험
하나의 클래스를 여러 상태에서 돌려써서 버그발생 확률이 높아지게 되는 것
이럴 때 인스턴스화
독립된 인스턴스기에 상태별로 인스턴스를 만들어서 분리시키고 개별맞춤으로 관리가능
인스턴스가 생성될 때, 인스턴스가 내부적으로 꼭 가져야될 값(valueOfSupply)을 생성자 레벨에서 강제하고 싶다면?
A.아래의 코드 추가 및 인스턴스 생생코드 new Accounting(생성자); 생성자 인자부분 채우기
// 생성자가 호출될 때 인자를 매개변수로 전달하고 싶기에 public accounting() {}에 valueOfSupply를 넣는다
public Accounting08_3(double valueOfSupply) {
this.valueOfSupply = valueOfSupply;
}
// 생성자 인자 넣기
Accounting08_3 a1 = new Accounting08_3(**10000.0**);
a1.valueOfSupply = 10000.0;
public accounting() {} 구현해주면 된다
생성자가 호출될 때 인자를 매개변수로 전달하고 싶기에 public accounting() {}에 valueOfSupply를 넣어주고 this.valueOfSupply 추가
위의 코드 this.valueOfSupply와 = valueOfSupply;가 가리키는 곳은?
this 키워드
전체코드
// OOP 8.2. 활용 - 인스턴스화
// 클래스화 to 인스턴스화
//class Accounting08_2{ // 클래스화
//
// public static double valueOfSupply;
// public static double vatRate = 0.1;
// public static double getVAT() {
// return valueOfSupply * vatRate;
// }
// public static double getTotal() {
// return valueOfSupply + getVAT();
// }
//}
// 클래스화
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 인스턴스화
class Accounting08_2{ // 인스턴스화
// 인스턴스 소속, static 제거
// static은 클래스소속이고 클래스가 인스턴스에 접근하면 에러나는건 어떤 인스턴스인지 모르기때문 a1?a2?
public double valueOfSupply;
public static double vatRate = 0.1; // 부가가치세는 어느 인스턴스나 10% 고정이기에 static설정이 유리
public double getVAT() { // 인스턴스 만들 때마다 메모리 사용하지 않아도 되고,
return valueOfSupply * vatRate; // vatRate파라미터는 얘 하나로 조절 가능해서 유지보수 용이
}
public double getTotal() {
return valueOfSupply + getVAT();
}
}
public class OOP08_2 {
public static void main(String[] args) {
// Accounting08_2.valueOfSupply = 10000.0;
// System.out.println("Value of supply : " + Accounting.valueOfSupply);
// System.out.println("VAT : " + Accounting.getVAT());
// System.out.println("Total : " + Accounting.getTotal());
//
// Accounting08_2.valueOfSupply = 20000.0;
// System.out.println("VAT : " + Accounting.getVAT());
//
// Accounting08_2.valueOfSupply = 50000.0;
// System.out.println("VAT : " + Accounting.getVAT());
//
// Accounting08_2.valueOfSupply = 900.0;
// System.out.println("Total : " + Accounting.getTotal());
Accounting08_2 a1 = new Accounting08_2();
a1.valueOfSupply = 10000.0;
Accounting08_2 a2 = new Accounting08_2();
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());
}
}
728x90
반응형
'JAVA > 생활코딩 JAVA 객체지향' 카테고리의 다른 글
JAVA 객체 지향 프로그래밍 - 9 수업을 마치며 (이후 수업 : 상속,인터페이스,패키지) (0) | 2022.02.02 |
---|---|
JAVA 객체 지향 프로그래밍 - 8.1. 활용 - 클래스화 (0) | 2022.02.02 |
JAVA 객체 지향 프로그래밍 - 7. 생성자(constructor)와 this (0) | 2022.02.01 |
JAVA 객체 지향 프로그래밍 - 6. static (0) | 2022.02.01 |
JAVA 객체 지향 프로그래밍 - 5. 인스턴스 (0) | 2022.02.01 |