JAVA

JAVA 메소드

별메아리 2023. 2. 8. 14:38
728x90

메소드는 객체의 동작에 해당하는 중괄호{} 블록을 말합니다.

 메소드 선언은 선언부와 실행 블록으로 구성됩니다. 메소드 선언부를 메소드 시그니처라고 부르며 선언부와 실행 블록에는 다음 요소를 포함합니다.

  • 리턴 타입 : 메소드가 리턴하는 결과의 타입을 표시합니다.
  • 메소드 이름 : 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어줍니다.
  • 매개 변수 선언: 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언합니다.
  • 메소드 실행 블록 : 실행할 코드를 작성합니다.

리턴타입 메소드이름 ( [매개변수선언], ···] ) {

 

실행할 코드를 작성하는 곳

 

}

 

리턴타입← 메소드가 리턴하는 결과 타입 표시

메소드 이름 메소드가 실행될 때 필요한 데이터를 받기 위한 변수

{} 메소드 실행블록

 

메소드 선언

메소드 선언은 선언부와 실행 블록으로 구성됩니다.

리턴 타입

리턴 타입은 리턴 값의 타입을 말합니다. 리턴 값이란 메소드를 실행한 후의 결과 값을 말합니다. 메소드는 리턴값이 있을 수도 있고 없을 수도 있으나 리턴값이 있을 경우 리턴 타입이 선언부에 명시되어야합니다.

 

예를 들어 전자계산기 객체에서 전원을 켜는 powerOn()메소드와 두 수를 나누는 기능인 divide()메소드가 있다고 가정해봅시다. powerOn() 메소드는 전원만 켜면 그만입니다. 따라서 powerOn()메소드는 리턴 값이 없습니다. 반대로 divide() 메소드는 나눗셈의 결과를 리턴해야 합니다. 리턴값이 없는 메소드는 리턴타임이 void로 기술하며 리턴값이 있는 메소드는 리턴값의 타입을 기술합니다. divide()결과가 double이라면 리턴타입은 double이 됩니다.

 

리턴타입이 있다고 해서 반드시 리턴값을 변수에 저장할 필요는 없습니다. 리턴값이 중요하지 않고 메소드 실행이 중요할 경우에는 다음과 같이 변수를 선언하지 않고 메소드를 호출할 수 있습니다.

divide( 10,20 );

 

메소드 이름

메소드 이름은 자바 식별자 규칙에 맞게 작성하면 되는데, 다음 사항에 주의해야 합니다.

  • 숫자로 시작하면 안 되고, $와 _를 제외한 특수 문자를 사용하지 말아야 합니다.
  • 관례적으로 메소드 이름은 소문자로 작성합니다.
  • 서로 다른 단어가 혼합된 이름이라면 뒤이어 오는 단어의 첫 글자는 대문자로 작성합니다.
  • 메소드 이름은 기능을 알 수 있도록 지어주는 것이 좋다.

매개 변수 선언

매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용됩니다. 메소드에서 메개 변수가 필요한 경우가 있고 필요 없는 경우가 있습니다.

 

예)

double divide( int x, int y ) {···}

double result = divide( 10, 20 );

여기서 x와 y는 int값을 설정했기 때문에

반드시 호출할 때는 int 값으로 주어야한다.

*단 byte로 줫을 경우에는 int로 자동변환되기 때문에 문제가 없다.

 

메소드선언

package ch06;

public class Calculator {
	// 메소드
	void powerOn() {
		System.out.println("전원을 켭니다.");
	}
	
	int plus(int x, int y) {
		int result = x + y;
		return result;
	}
	
	double divide(int x, int y) {
		double result = (double)x / (double)y;
		return result;
	}
		void powerOff() {
			System.out.println("전원을 끕니다.");
		}
	}

메소드 호출 

package ch06;

public class CalculatorExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calculator myCalc = new Calculator();
		myCalc.powerOn();
		
		int result1 = myCalc.plus(5, 6);
		System.out.println("result1:"+result1);
		
		byte x = 10;
		byte y = 4;
		double result2 = myCalc.divide(x, y);
		System.out.println("result2:"+ result2);
		myCalc.powerOff();
	}

}

매개 변수의 개수를 모를 경우

메소드의 매개 변수는 개수가 이미 정해져 있는 것이 일반적이지만, 어떤 상황에서는 메소드를 선언할 때 매개 변수의 개수를 알 수 없는 경우도 있습니다. 해결책은 다음과 같이 매개 변수를 배열 타입으로 선언하는 것입니다.

int sum(int [ ] values) {  }

 

int[ ] vlaues = {1,2,3};

int result = sum1(values);

int result = sum1(new int[] {1,2,3,4,5});

매개 변수를 배열 타입으로 선언하면 메소드르 호출하기전에 배열을 생성하는 하는 불편한 점이 있습니다.

그래서 배열을 생성하지 않고 값의 목록만 넘겨주는 방법도 있습니다. 다음과 같이 sum2()메소드의 매개 변수를 ···를 사용해서  선언하게되면 메소드 호출 시 넘겨준 값의 수에 따라 자동으로 배열이 생성되고 매개값으로 사용됩니다.

 

int sum2 (int ···values){}

int result = sum2(1,2,3);

int result = sum2(1,2,3,4,5);

···로 선언된 매개 변수의 값은 다음과 같이 메소드 호출시 쉼표로 나열해주면 됩니다.

 

int[] values ={1,2,3};

int result = sum2(values);

int result = sum2(new int[] {1,2,3,4,5});

···로 선언된 매개 변수는 배열 타입이므로 다음과 같이 배열을 직접 매개값으로 사용해도 좋습니다.

 

매개 변수의 개수를 모를 경우

package ch06;

public class Computer {
	int sum1(int[]values) {
		int sum = 0;
		for(int i=0; i<values.length; i++) {
			sum += values[i];
		}
		return sum;
	}
	int sum2(int ... values) {
		int sum = 0;
		for(int i= 0; i<values.length; i++) {
			sum += values[i];
		}
		return sum;
	}
}

매개 변수의 개수를 모를 경우

package ch06;

public class ComputerExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Computer myCom= new Computer();
		
		int[] values1 = {1,2,3};
		int result1 = myCom.sum1(values1);
		System.out.println("result1:"+result1);
		
		int result2 = myCom.sum1(new int[] {1,2,3,4,5});
		System.out.println("result2:"+result2);
		
		int result3 = myCom.sum2(1,2,3);
		System.out.println("result3:"+ result3);
		
		int result4 = myCom.sum2(1,2,3,4,5);
		System.out.println("result4:"+result4);
	}

}

 

728x90