티스토리 뷰
지난 포스팅까지 Java에 있어서 가장 기본적인 하지만 필수적인 문법들을 살펴보았다.
이번 포스팅은 총 3개로 나누어서 Method, Class, Instance에 이르는 개념에 대해 맛볼 수 있는 작은 프로젝트를
진행하며 개념을 살펴볼 것이다.
하지만 그전에 지금까지 배웠던 지식을 통해서 앱을 만들어보고 어떤 점이 문제가 있는지,
어떤 방향을 개선하면 좋은지를 먼저 살펴보고 본격적인 개념에 대해 들어가 보고자 한다.
먼저 어떠한 프로젝트, 즉 어떤 앱을 만들지에 대해서 간단하게 살펴보자.
하려고 하는 것
현재 우리는 치킨집을 운영하고 있다.
치킨을 판매하게 되면 세금, 인건비, 유통비와 같은 비용이 발생하고 이를 모두 제외한 순수한 이익을 구하고자 한다.
또 우리는 특정 투자자들에게 투자를 받아 이 수익금을 투자자와 나누어 가져야 한다고 생각해보자.
매번 계산기를 두드려 이러한 계산을 하는 것은 굉장히 비효율적일 것이다.
우리는 이러한 계산을 편리하게 할 수 있는, 그저 치킨값만 입력하면 모든 것을 알아서 척척 계산해주는 앱을 만들어 보자.
가장 원시적인 방법
( 계산의 편리함을 위해 부가세는 10%, 제품을 만드는데의 비용은 30%, 각 투자자들에게 지급되는 비율은 5:3:2로 지정합니다. )
우선 간단하게 작성한 코드를 감상한 뒤에 이 코드의 문제점에 대해서 살펴보자.
public class AccountingArrayApp {
public static void main(String[] args) {
double ValueOfSupply = Double.parseDouble(args[0]); // 판매가
double VatRate = 0.1; // 부가가치세 비율
double expenseRate = 0.3; // 비용에 대한 비율
double Vat = ValueOfSupply * VatRate; // (계산식) 부가가치세
double Total = ValueOfSupply + Vat; // (계산식) 총 판매가
double Expense = ValueOfSupply * expenseRate; // (계산식) 비용
double Income = ValueOfSupply - Expense; // (계산식) 수입
double[] DividendRates = {0.5, 0.3, 0.2}; // 수익금 분배 비율
System.out.println("Value of supply : " + ValueOfSupply);
System.out.println("VAT : " + Vat);
System.out.println("Total : " + Total);
System.out.println("Expense : " + Expense);
System.out.println("Income : " + Income);
System.out.println("Dividend 1 : " + Income * DividendRates[0]);
System.out.println("Dividend 2 : " + Income * DividendRates[1]);
System.out.println("Dividend 3 : " + Income * DividendRates[2]);
}
}
가장 먼저, 반복적으로 선언되는 변수들, 또 그 안에 유사한 변수들이 들어가 있어 가독성이 많이 떨어진다.
또한, 부가세를 계산하는 코드가 지금은 단 한줄이지만 그 수학적 계산 방법이 복잡하다면 해당 코드도 복잡해질 것이다.
즉, 부가세를 계산하는 어떤 Method를 생성해서 간단하게 해당 Method를 호출하는 방식으로 계산한다면 코드가
간단해질 것이고 가독성 면에서도 월등하게 좋아질 것이다. 이것은 부가세 뿐만 아니라 모든 계산식에 해당한다.
그리고 두번째, 위 코드에서 출력하는 Print문들이 고정적으로 출력을 해야 하는 문자열이라면 그것 또한 반복적으로
출력을 하고 있기에 보기에 굉장히 어지러워 보인다.
Method를 도입할 필요가 생긴 것이다!
Method 적용
역시 우선적으로 코드를 살펴보자.
public class AccountingMethodApp {
// Zone 1
// 전역 변수 선언
public static double ValueOfSupply;
public static double vatRate;
public static double expenseRate;
public static double[] Dividend;
// Zone 2
// Main 함수
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();
}
// Zone 3
// Method Section
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;
}
}
우선 가장 먼저 눈여겨 볼 것은 Zone 2의 Main함수 부분이다.
최초에 등장했던 코드와 현재 코드는 동일한 결과를 출력함에도 Main함수를 Method를 활용한 코드가 훨씬 직관적이고
가독성도 좋은 것을 볼 수 있다.
이것은 기존에 존재했던 복잡한 계산식과 변수들을 Zone 3에 넣었기 때문, 즉 Method화 하였기 때문이다.
get_____ : 위 (계산식) 에 해당하는 부가세, 비용, 수익 ... 등의 계산식을 담고 있는 Method
이렇게 Method화 하기 위해서는 기존의 변수들을 Main함수에서만 사용하지 않고, 이 프로그램 전체에서 사용할 수 있도록
전역변수로써 선언을 해주어야 하는데 그것이 바로 Zone 1의 부분이다. (지역변수 → 전역변수)
우리는 그저 간단한 앱을 만들었기 때문에 그 효용성이 적어 보이지만, 해당 계산식들이 굉장히 복잡한
수십 ~ 수백 줄에 이르는 수식을 아우르는 코드라면 이 작업만으로도 충분히 가독성이 뛰어난 코드를 작성했다고
할 수 있을 것이다.
다음은 이러한 Method를 조금 더 개선시킬 수 있는 Class에 대해서 알아보도록 하자.
포스팅의 모든 학습 내용은 생활코딩의 Java1 수업의 출처임을 밝힙니다.
'프로그래밍 > Java 기초' 카테고리의 다른 글
Java(11-3), 나의 앱 만들기 (Feat. Instance) (0) | 2020.08.19 |
---|---|
Java(11-2), 나의 앱 만들기 (Feat. Class) (0) | 2020.08.19 |
Java(10-1), 배열 for - each (0) | 2020.04.13 |
Java(10), 배열 (0) | 2020.04.10 |
Java(9), 반복문 (0) | 2020.04.07 |