티스토리 뷰

우리는 지난 포스팅에서 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 수업의 출처임을 밝힙니다.

 

@ 강의 출처 : Open Tutorials

댓글
링크
최근에 올라온 글
Total
Today
Yesterday