티스토리 뷰
우리는 지난 포스팅에서 Method를 통해 코드를 좀 더 직관적이고, 깔끔하게 작성하는 것을 해보았다.
그럼 지난 코드를 다시 가져와서 Method화만 시킨 코드의 한계점을 한번 생각해보자.
지난 시간에 작성한 코드는 아래와 같다.
public class AccountingMethodApp {
public static double ValueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double[] Dividend;
public static void main(String[] args) {
ValueOfSupply = 10000.0;
vatRate = 0.1;
expenseRate = 0.3;
Dividend = new double[] {0.5, 0.3, 0.2};
Print();
}
private 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]));
}
}
private static double getDividend(double DividentRate){
return getIncome() * DividentRate;
}
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;
}
}
첫 번째, 만약 우리의 앱이 점차 커져서 현재 작성한 Method, 변수 외에 다른 여러 가지 것들이 추가될 수 있다.
그럴 경우에 지금은 단순하게 최소한의 것들만 표현을 해서 수식으로 나타내었기 때문에 큰 문제는 되지 않겠지만,
예를 들어 비용에 관련된 부분을 조금 더 세분화 한다고 해보자.
배송에 관련된 비용, 원가에 관련된 비용, 가게 운영비에 관련된 비용, 인건비에 관련된 비용 ... 굉장히 많은 부분으로
세분화할 수 있고, 하다못해 인건비에 관련된 비용에서 아르바이트 시급 계산, 주휴 수당, 초과 근무 급여 등등 일일이
Method화 시켜 놓는다면 우리가 프로그램을 만드는 생산성을 급격하게 떨어뜨리는 방해 요소가 될 수 있다.
즉, Method를 묶어서 이름붙여 어떤 역할을 하는 Method인지 정리할 수 있도록 하는 것이 Class다.
또 두번째, Class가 없다면 동일한 이름을 가진 Method와 변수는 생성할 수 없다.
즉, 위 처럼 흔한 이름의 Print와 같은 Method는 두 개 존재할 수 없다는 말이 된다.
이것은 당연한 말 같지만, 또 다르게 생각하면 프로그램을 만드는 입장에서 굉장히 불편한 일이다.
즉,, Class를 도입할 필요가 생긴 것이다!!
Class 적용
선 코드, 후설명!
// Zone 1
// Class Section
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]));
}
}
}
// Zone 2
// Main 함수
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();
}
}
기존 코드에서 Method들이 모두 위쪽 Zone 1의 class라고 하는 영역으로 들어간 것을 볼 수 있다.
즉, 우리가 폴더에 파일들을 넣어서 파일을 정리하는 것과 동일하게 특정 Method를 어떠한 class의 아래에
놓아주는 것이다. 따라서 이러한 경우에 우리가 폴더 안에 파일을 집어넣으면 절대 경로가 Dir/... 으로 바뀌듯이
Method도 어떠한 class아래에 있는지 명시를 해주어야 한다.
이것은 Zone 2의 Method 앞에 class 이름이 붙어있는 것으로 확인할 수 있다.
이 경우에 한 가지 주의할 점은 Class에 사용되는 Method는 기존 코드의 private ~ 이 아닌 public 으로 명시함으로써
어디에서도 사용 가능하도록 지정해주어야 한다는 점이다.
여기까지, 마지막으로 다음 포스팅에서는 이 Class를 조금 더 효율적으로 사용할 수 있는 Instance에 대해서 배워보자.
포스팅의 모든 학습 내용은 생활코딩의 Java1 수업의 출처임을 밝힙니다.
'프로그래밍 > Java 기초' 카테고리의 다른 글
Java(12), 객체 지향 프로그래밍 (0) | 2020.11.28 |
---|---|
Java(11-3), 나의 앱 만들기 (Feat. Instance) (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 |