안녕하세요! 쏘코입니다.

 

이번 포스팅에서는 메소드의 리턴값 출력과 메소드의 활용에 대해서 알아보도록 하겠습니다.

 

목차


    0. 메소드의 출력

    메소드가 매개변수를 통해 입력값을 받아온다는 것을 확인했죠?

    이번에는 메소드가 작동이 끝났을 때 값을 반환하는 것에 대해서 알아보겠습니다!

     

    OutputMethod라는 클래스를 하나 만들어줍니다.

    우리는 a라는 메소드와 one이라는 메소드를 만들 거에요.

    a라는 메소드는 "a"라는 리턴값을 출력할 것이고, one이라는 메소드는 1이라는 리턴값을 출력할 것입니다.

     

    메소드의 출력을 담당하는 명령어return입니다.

    컴파일러가 메소드를 작동하다가 return명령어를 만나면 그 자리에서 메소드를 읽는 것을 멈추고 return 뒤에 있는 값을 출력하고 메소드를 끝내게 됩니다.

     

    a()는 String 형태의 a를 출력해야 하기 때문에 return "a",

    one()은 int 형태의 1을 출력해야 하기 때문에 return 1을 적어주면 되겠죠?

     

    그리고 하나 더 신경을 써야 하는 부분이 있습니다.

    리턴값에 따라 메소드명 앞의 데이터값도 바꿔줘야 합니다.

    a()는 String형태의 a를 출력하기 때문에 String a()가 되어야하고,

    one()은 int 형태의 1을 출력하기 때문에 int one()이 되어야 합니다.

     

    public class OutputMethod {
    
    	public static String a() { // output이 String이다
    		// ...
    		return "a";
    	}
    	
    	public static int one() { // output이 int이다
    		return 1;
    	}
    	
    	public static void main(String[] args) { // void는 리턴값이 없다
    
    		System.out.println(a());
    		System.out.println(one());
    
    	}
    
    }

     

     


    1. 메소드의 활용

    제가 아직 포스팅으로 작성하지는 않았지만 JAVA1 수업의 나의 앱 만들기 1/2 영상에서 부가가치세를 게산해서 물건의 가격을 출력하는 클래스를 만든 적이 있었습니다.

    이 클래스를 메소드를 활용해서 좀 더 깔끔하게 만들어보도록 하겠습니다.

     

    이미 만든 적이 있으시다면 AccountingApp 클래스를 수정하시면 되고, 아직 만든 적이 없으시다면 AccountingApp 클래스를 하나 만들어줍니다.

    그리고 공급가액, 부가가치세율, 부가세, 합계 등을 고려하여 아래와 같이 main 메소드 아래에 적어줍니다.

     

    public class AccountingApp {
    
    	public static void main(String[] args) {
    		// 공급가액
    		double valueOfSupply = 10000.0;
    		// 부가가치세율
    		double vatRate = 0.1;
    		// 부가세
    		double vat = valueOfSupply * vatRate;
    		// 합계(공급가액 + 부가세)
    		double total = valueOfSupply + vat;
    		
    		System.out.println("Value of supply : " + valueOfSupply);
    		System.out.println("VAT : " + vat);
    		System.out.println("Total : " + total);
    
    	}
    
    }

     

    지금은 별로 복잡하지 않은 코드지만, 만약 코드의 길이가 1억 줄 가까이 된다면 이해하기 굉장히 어렵겠죠?

    우리는 메소드를 활용하여 깔끔하게 정리할 수 있습니다.

     

    먼저 부가세를 구하는 메소드를 만들어봅시다.

    메소드의 이름은 getVat()로 할 것이고, 매개변수는 받지 않습니다.

    그리고 리턴값으로 double형을 출력할 것이기 때문에 메소드명 앞에 void 대신 double을 붙여줍니다.

    이제 중괄호 안에는 부가세를 계산하기 위한 식인 valueOfSupply * vatRate를 반환할 수 있도록

    return valueOfSupply * vatRate

    를 넣어주면 되겠죠!

     

     

    다만 여기서 에러가 발생합니다.

    valueOfSupply와 vatRate는 main 메소드 내에서 정의되어있는 지역변수입니다.

    지역변수는 다른 메소드에서는 그대로 사용할 수 없겠죠?

    이걸 매개변수로 받아와서 사용할 수도 있겠지만, 이번에는 전역변수를 선언하여 사용할 수 있도록 만들어보겠습니다.

     

    getVat 메소드 위에다가 main 메소드 안에 있던

    double valueOfSupply = 10000.0;

    double vatRate = 0.1;

    을 빼줍니다.

    그리고 앞에 public static을 붙여줍니다.

    이 변수가 public이고, 정적변수임을 선언해주는 부분인데, 아직 모르셔도 관계 없습니다.

    여기까지 만들고 프로그램을 돌리시면 정상적으로 작동합니다!

     

     

    이번에는 total을 구하는 부분도 메소드화 해 보도록 하겠습니다!

    거의 같은 방식이지만, return값에서 위에서 선언한 getVAT 메소드의 리턴값을 활용했습니다.

     

     

    이제 계산을 위해 만들었던 변수가 필요가 없어졌습니다.

    출력메소드인 println에서 바로 메소드를 써 버리면 되니까요!

    이제 진짜 훨씬 단순해진 코드를 만들 수 있게 된 겁니다!

     

    public class AccountingApp {
    	// 공급가액
    	public static double valueOfSupply = 10000.0;
    	// 부가가치세율
    	public static double vatRate = 0.1;
    	
    	public static double getVAT() {
    		return valueOfSupply * vatRate;
    	}
    	
    	public static double getTotal() {
    		return valueOfSupply + getVAT();
    	}
    	
    	public static void main(String[] args) {
    		
    		System.out.println("Value of supply : " + valueOfSupply);
    		System.out.println("VAT : " + getVAT());
    		System.out.println("Total : " + getTotal());
    
    	}
    
    }

     

    만약 코드가 1억 줄이라면, 메소드를 이용해 코드를 한 줄로 바꾸는 것을 통해서 우리는 코드를 훨씬 더 단순화시킬 수 있고, 그 구체적인 동작 방법에 이름을 붙이는 것을 통해 이 메소드가 어떤 역할을 하는지 사용자에게 명확하게 전달할 수 있게 됩니다.

    또한 코드를 유지보수하고 개선해야 하는 경우 메소드 내에서 원하는 동작으로 바꿔줌으로써 사용하고 있는 모든 메소드가 한번에 바뀌는 폭발적인 효과를 얻을 수도 있습니다!!

     


    지금까지 배운 내용을 통해 다른 사람들의 메소드를 사용할 수 있게 되었고, 내가 필요한 메소드를 직접 만들어서 사용할 수도 있게 되었습니다!

     

    이 다음에 우리가 공부해 볼만한 주제는 객체 지향 프로그래밍(Object Oriented Programming)입니다.

    서로 연관된 메소드가 변수를 그룹핑해서 이름을 붙인 것이 클래스입니다.

    이 클래스를 복제해서 서로 다른 내부적인 상태를 갖고 있는 복제본들을 인스턴스라고 합니다.

     

    클래스와 인스턴스를 포괄적으로 객체라고 생각할 수 있습니다. (명확한 정의는 OOP 포스팅에서!!)

    바로 이 객체를 뼈대로 하는 프로그램을 만들어가는 프로그래밍 방법론을 객체 지향이라고 합니다.

    최근 만들어지고 있는 언어들은 이 객체 지향 방법론을 이용한 경우가 많고,

    이 방법을 바탕으로 라이브러리들도 만들어지고 있습니다.

    다른 사람들과 라이브러리를 공유하고 사용하기 위해서는 객체 지향 프로그래밍에 대한 이해가 필요하겠죠??

     

    기대가 되시나요? 저도 빨리 공부해보고 싶습니다 :)

    그렇다면 다음 포스팅에서 뵙도록 하겠습니다!!

    읽어주셔서 감사합니다 😆😆

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기