자바/자바 입문 공부일지

자바 기초 공부 일지 9. 메소드 method

Tomitom 2022. 10. 26. 16:32
반응형

 

 

메소드의 정의와 호출!

 

자바에서 메소드는 함수입니다. 
함수가 클래스에 포함되어 있으면 메소드라고 하기 때문에 자바에서의 메소드는 통상적으로 함수를 뜻해요. 

메소드는 여러 개를 작성해서 여러 번을 사용할 수 있기 때문에

코드가 복잡해지거나 가독성이 떨어지는 경우에 효율적이에요. 

 

 

메소드 중 main 이라고 하는 코드 블럭이 시작점입니다. 이것은 자바의 규칙으로 프로그램은 main 에서부터 시작됩니다. 

이것은 메소드 이름이 main 이고 중괄호 내 문장들이 순차적으로 시작하는 것입니다. 

main은 자바 프로그램의 엔트리 포인트라고 해요. 

그 외의 메소드들은 모두 일반 메소드입니다. 즉 일반 메소드는 메소드 내부에서 선택적으로 불러낼 수 있는 코드 블럭입니다. 

 

package day13;

public class Start {

	public static void main(String[] args) {
	
    }

	public static void hiEveryone(String[] args) {    // hiEveryone 이란 일반메소드 생성
		System.out.println("안녕하세요!");
		
	}
	
	
}

 

위의 예제에서 hiEveryone 이라는 일반 메소드를 임의로 생성했습니다. 

만약 이렇게 main 메소드의 코드블럭이 아닌 다른 메소드에만 코드블럭을 만든 채 실행하면 

아무런 결과값도 출력되지 않습니다. 

그럼 아래의 예제를 볼게요. 

 

package day13;

public class Start {

	public static void main(String[] args) {
		hiEveryone();	   // 메인 메소드에서 일반 메소드 호출 
	}

	
	public static void hiEveryone() {       // 달라진 점! 메소드 옆의 괄호 안 내용 삭제 
		System.out.println("안녕하세요!");
		
	}
	
	
}

 

아까의 예제에서 달라진 것이 두 개 있습니다. 

하나는 메인 메소드에서 일반 메소드를 호출해서 실행한 것이고, 

또 하나는 일반 메소드 hiEveryone 옆의 괄호가 공란인 것이에요. 

 

main 메소드 옆에 있는 (String[] args) 이 괄호의 역할은 매개변수를 전달하는 역할을 하고 있습니다. 

변수에 어떤 변수를 전달할지를 정해주는 것이므로 변수에 아무것도 전달하지 않는다는 의미로

괄호를 비운 채 실행을 하면 해당 값이 그대로 출력됩니다.

 

메소드는 다회 사용이 가능하며, 매개변수의 값은 변경이 가능합니다. 

이번에는 메소드 옆의 매개변수를 전달할 수 있는 인수를 지정한 뒤에 출력해볼게요. 

 

package day13;

public class Start {

	public static void main(String[] args) {
	
		hiEveryone(5);	 // 메소드의 매개 변수에 5 입력 
	}

	
	public static void hiEveryone(int age) {      // int 매개변수를 받을 수 있는 age 라는 변수
		System.out.println("안녕하세요!");     // 메소드를 실행할 경우 출력되는 문장
		System.out.println("제 나이는 : "+ age);    // 매개변수를 받아서 출력하는 변수 
		
	}
	
	
}

public static void main(String[] args) {

 hiEveryone(5);  // 일반 메소드를 호출해서 매개변수 값을 지정하면 해당 코드블럭이 호출됩니다.

 hiEveryone(12); // hiEveryone의 메소드를 호출하기로 합니다. 변수 age로 12를 전달합니다. 

 hiEveryone(46);
 }

public static void hiEveryone(int age) {     // int age는 hiEveryone 안에서만 적용되는 지역변수입니다. 메인에서 입력한 매개변수를 받습니다. 
 System.out.println("안녕하세요!");           // 메소드가 호출되면 하단의 내용을 실행합니다. 
 System.out.println("제 나이는 : "+ age);    // 메소드가 끝나면 순차적으로 main의 다음 메소드로 돌아가서 실행이됩니다. 
 }

}

 

실행 과정 출처 윤성우의 열혈자바 자료집

 

 

일반 메소드는 이름과 내용을 정해주고, 매개변수를 정해줄 수 있습니다. 

매개변수는 int, double, String 등 변수를 선언하는 것과 동일하게 작성합니다.

즉 받으려는 매개변수의 자료형에 따라서 알맞은 선언을 해야합니다. 

 

매개변수는 여러 개를 받을 수 있습니다. 

2개 이상의 매개변수를 받기 위해 작성할 때에는 쉼표로 구분하여 사용합니다. 

그럼 매개변수를 여러 개 받는 코드를 작성해보고 하나씩 읽어볼게요. 

 

package day13;

public class Start {

	public static void main(String[] args) {
		double myHeight = 159.7;
	
		hiEveryone(5,179.9);
		byeEveryone("자비스 엄마");
		System.out.println("");
		
		hiEveryone(32, myHeight);
		byeEveryone("작가");
		
	}

	
	public static void hiEveryone(int age, double height) {   
		System.out.println("안녕하세요!");
		System.out.println("제 나이는 : "+ age + "세 이고, 키는 " + height + "입니다.");
		
	}
	
	public static void byeEveryone(String dream) {
		System.out.println("제 꿈은 " + dream + "입니다.");
	}
	
}

< main 메소드 영역 > 
 
    public static void main(String[] args) {
        double myHeight = 159.7;       // main 메소드 안에 선언된 실수 변수 myHeight
   
        hiEveryone(5, 179.9);
        byeEveryone("자비스 엄마");
        System.out.println("");
       
        hiEveryone(32, myHeight);
        byeEveryone("작가");
       
    }

 

< hiEveryone 메소드 영역 > 
   
    public static void hiEveryone(int age, double height) {    // 정수 age와 실수 height  두 개의  매개변수를 받는 메소드 생성
 
        System.out.println("안녕하세요!");           // 메소드의 출력물
        System.out.println("제 나이는 : "+ age + "세 이고, 키는 " + height + "입니다.");
       
    }
 
 
< byeEveryone 메소드 영역 > 
   
    public static void byeEveryone(String dream) {     // 문자열 dream의 매개변수를 받는 메소드 생성
        System.out.println("제 꿈은 " + dream + "입니다.");   // 메소드의 출력물
    }
   

 

그럼 메소드를 호출하고 지정하는 것을 알았으니 그 옆에 있는 void 라는 용어를 살펴볼게요. 

void 는 값을 반환하지 않음을 의미합니다. 

즉, 함수를 사용하고 나서 남는 것이 없습니다. void 를 반환하는 함수의 경우 기능을 수행하고 사라집니다. 

그래서 return (값을 반환한다)  으로 값을 남겨야만 기능을 수행한 뒤에 값이 남습니다. 

 

오류가 발생한 코드

 

그렇기 때문에 void 메소드 안에 값을 넣고 그것을 출력으로 반환하려고 하면 문자열이 없다는 오류가 뜹니다. 

즉, 저 안은 비어있다는 뜻이에요. 

 

void 대신에 자료형을 작성하면 특정 데이터의 자료형을 반환할 수 있습니다. 

반환할 때에는 return 을 사용합니다. (값의 반환) - 메소드를 호출한 영역으로 값을 반환

return 은 데이터를 반환하고, 함수를 종료합니다. 

 

package day13;

public class Start {

	public static void main(String[] args) {
		
		System.out.println(getData());
		
	}
	
	public static int getData() {  //  int 형 데이터를 반환하는 getData 메소드를 만듦
		
		return 10; 
	}
	
	
}

 

 

위 예제에서 return 이 쓰인 것처럼, return 은 반환을 하며 메소드를 중단할 때 주로 사용합니다. 

return 이 구문 안에 등장하면 처음 등장한 이후의 구문은 실행되지 않습니다. 

그럼 메소와 return을 활용한 다음 예제를 작성해보며서 마무리할게요.  

 

package day13;

public class Start {

	public static void main(String[] args) {
	
		int result;
		result = adder(4, 5); // adder 메소드가 반환하는 값을 result에 저장
		System.out.println("4 + 5 = " + result );
		System.out.println("3.5  x 3.5 = " + square(3.5));
	}
	
	public static int adder(int num1, int num2) {
		int addResult = num1 + num2;
		return addResult;    // addResult 의 값을 반환
	}
	
	public static double square(double num) {
		return num * num; // num * num 의 결과를 반환 
	}
		
	
}

 

 

package day13;

public class Start {

    public static void main(String[] args) {        //main 메소드 생성
   
        int result;             // result 값을 정수로 지정.
        result = adder(4, 5); // adder 메소드에 값을 4와 5를 입력하고 메소드가 반환하는 값(addResult)을 result에 저장
        System.out.println("4 + 5 = " + result );
        System.out.println("3.5  x 3.5 = " + square(3.5));
    }
   
    public static int adder(int num1, int num2) {
        int addResult = num1 + num2;
        return addResult;    // addResult 의 값을 반환
    }
   
    public static double square(double num) {
        return num * num; // num * num 의 결과를 반환
    }
 }

우선 여기까지 정리하고 나중에 예제로 다시 복습할게요. 

반응형