[JAVA] 메소드 만들어보기

아임 레조·2022년 6월 27일
0

JAVA

목록 보기
18/21
post-thumbnail

메소드(method)는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자로 클래스의 동작을 나타내는 함수이다.

public class methodApp {

	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 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: " + (income * dividend1)); 
		System.out.println("Dividend 2: " + (income * dividend2));
		System.out.println("Dividend 3: " + (income * dividend3));

	}

}

메소드로 추출하기(Extract Method)

오늘 vat부분을 시작으로 메소드를 한번 설정해줘보고자 한다. 해당 부분을 블록처리 해주고 마우스 오른쪽을 클릭 refactor > Extract Method에 들어간다.

Method name을 입력하고 OK 버튼 누르기!

그리고 코드를 돌아가서 확인해보면,

이렇게 새로운 코드가 추가된다. 코드의 정확한 의미까지는 알 수 없지만(private이라든지 하는) 29, 30번째 줄에서 vat값을 return시켜주기 때문에 변수를 선언해주는 부분에 덕지덕지 수식이 들어가지 않아서 코드가 굉장히 깔끔해졌다. 지금은 1-2줄에 불과한 코드지만 1만줄, 1억줄 이상의 코드였다면 훨씬 더 깔끔해졌음을 체감할 수 있었을 것이다.

지역변수(Local variable) vs 전역변수(Field)

여기서 코드를 더 깔끔하게 만들어보고 싶어져서 분홍색 상자에 나온 것처럼 parameters를 위쪽과 아래쪽 모두에서 지워버리면 32번째 줄(빨간 상자)에서 에러가 뜬다.

이유는 valueOfSupply와 vatRate라는 변수는 main함수 내에서만 사용가능한(노란상자 안) 지역변수이기 때문이다. 하지만 30, 31번째 줄의 getVAT() 메소드의 경우 노란색 상자 밖에 선언되어있기 때문에 지역변수를 methodApp(노란색 상자) 전체에서 사용할 수 있는 전역변수로 바꿔주는 작업이 필요하다.

방법은 1. 전역변수로 바꾸고 싶은 지역변수 부분을 복사해서 main함수 위로 붙여넣기해 위치를 바꾸어준다 2. 바꿔줄 변수 블록> 마우스 오른쪽 클릭> refactor > Convert Local Variable to Field (local variable: 지역변수, field: 전역변수) > Access modifier에서 public 선택

이런 과정을 반복해서 코드 내에서 바꿀 수 있는 것들은 모두 바꾸어 메소드화 시켜준다.

public class methodApp {
	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; 
		//double vat = getVAT(valueOfSupply, vatRate);
		
		print();
        getIncome(); 
	}

	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()); 
		System.out.println("Dividend 1: " + (getIncome() * getDividend1())); 
		System.out.println("Dividend 2: " + (getIncome() * getDividend2()));
		System.out.println("Dividend 3: " + (getIncome() * getDividend3()));
	}

	private static double getDividend3() {
		return getIncome() * 0.2;
	}

	private static double getDividend2() {
		return getIncome() * 0.3;
	}

	private static double getDividend1() {
		return getIncome() * 0.5;
	}

	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(double valueOfSupply, double vatRate) {
		private static double getVAT() {
		return valueOfSupply*vatRate;
	}
}

이제 main 메소드 안의 지역 변수들은 필요가 없어졌기 때문에 모두 삭제해도 상관이 없고 이로 인해 main 메소드 안의 동작들은 단순해졌고, 세부적인 동작들은 다른 메소드 안에서 정의되어 프로그램을 사용하는 입장에서 보기 단정한 코드가 되었다.

개인적으로 자바스크립트를 공부할때도 지역변수, 전역변수를 이해하는 것이 쉽지는 않았다. 하지만 예제를 통해서 코드의 에러를 확인하며 작업하니 훨씬 더 이해하기가 편했다.

profile
어쩌다보니 백엔드 개발자/ 번아웃 없이 재밌게 개발하고 싶어요

0개의 댓글