본문 바로가기

Language/Java

메소드 (Method)

메소드(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