메소드(method)란 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자이다.
메소드는 클래스의 동작을 나타내는 함수이다. 이전에 다루었던 Math의 floor, ceil 혹은, PrintWriter의 write, close 등이 메소드이다.
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = 10000.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 dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 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 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
}
}
가령, 위 코드에서
double vat = valueOfSupply * vatRate;
이 코드의 valueOfSupply * vatRate 를 메소드로 만들기 위해서는, Refactor → extract method 로 가서 getVAT 로 이름을 짓는다. 이때 public 으로 체크하고, 아래에 Replace 1 additional occurrence of statements with method 는 체크 해제한다.
그러면 이렇게 된다.
그런데 getVAT(valueOfSupply, vatRate) 안에 있는 입력값들이 보기 싫어서 깔끔하게 하고 싶으면, 안에 valueOfSupply, vatRate를 지우면 된다. 그런데 valueOfSupply, vatRate는 현재 main 메소드의 중괄호 안에서 선언되어 있다. 즉 main 메소드 안에서만 사용할 수 있는 지역변수(local variable)이다. 이것을 사용하려면 AccountingApp 클래스의 전역변수로 지정해서 모든 메소드에서 접근할 수 있도록 해야 한다.
전역변수로 지정하는 첫 번째 방법은
이렇게 AccountingApp의 main 메서드 위로 올리는 방법이 있다. main 메서드 바깥에서 선언할 때에는 public static 을 앞에 입력해야 한다.
두 번째 방법은, vatRate을 더블 클릭하고, Refactor → Convert Local Variable to Field 로 가서, public 을 체크하고 엔터를 누른다.
그리고 변수의 선언은 바깥쪽에서 하되, 변수의 값은 main 안에서 세팅을 하는 것이 바람직하다.
이렇게 정리하는 것이다.
이런 식으로 전부 메소드화 해서 깔끔하게 정리하면
public class AccountingApp {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void main(String[] args) {
valueOfSupply = 10000.0;
vatRate = 0.1;
expenseRate = 0.3;
print();
}
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());
System.out.println("Dividend 1 : " + getDividend1());
System.out.println("Dividend 2 : " + getDividend2());
System.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend1() {
return getIncome() * 0.5;
}
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;
}
}
이렇게 된다.
'Language > Java' 카테고리의 다른 글
== vs equals (0) | 2022.11.09 |
---|---|
클래스 (Class) (0) | 2022.11.07 |
상속 (Inheritance) (0) | 2022.11.03 |
인스턴스 (0) | 2022.11.03 |
패키지, 클래스, 변수, 메소드 간 관계 (0) | 2022.11.03 |