[JAVA] 메소드

김주현·2021년 3월 30일
1

Java

목록 보기
6/15

메소드

메소드는 영어로 method라고 하며, 다른 언어에서는 함수(function)라고도 합니다. 메소드란 특정 기능을 정의한 코드들의 집합이라고 생각하면 됩니다.

메소드의 정의와 호출

여기서 numbering이라는 것이 메소드입니다.

그림에서 위에 있는 부분을 메소드 정의라고 하고 아래에 있는부분을 메소드 호출이라고 합니다.

메소드를 사용하는 목적

  • 계속해서 중복되는 코드를 메소드로 정의하고 호출함으로써 가독성을 높일 수 있다.
  • 코드에 문제가 생길 때 메소드만 수정하면 되니까 유지보수에 도움이 된다.

메소드의 효용성

메소드를 사용하지 않는 예제

아래와 같이 코드를 5번이나 복사해서 붙여넣으면서 코드가 길어졌다.

public class methodNot {
  
	public static void main(String[] args) {
		int i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
		i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
		i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
		i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
		i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
	}

}

메소드를 사용한 예제

이미 정의해놓은 로직을 재활용할 수 있게 되면서 코드의 양이 극단적으로 줄어들었다.

public class MethodDemo {

	public static void numbering() {
		int i=0;
		while(i<10) {
			System.out.println(i);
			i++;
		}
	}
	
	public static void main(String[] args) {
		numbering();
		numbering();
		numbering();
		numbering();
		numbering();
		
	}

}

매개변수와 인자

아래 예제에서 int limit에 있는 변수를 매개변수라 하며, 영어로는 parameter라고 합니다. 함수의 정의에서 전달받은 인수를 함수 내부로 전달하기 위해 사용합니다.

numbering안에 있는 숫자5는 인수라고 하며, 인수(argument)란 함수가 호출될 때 함수로 값을 전달해주는 값을 말합니다.

public class MethodDemo4 {

	public static void numbering(int limit) {
		int i=0;
		while(i<limit) {
			System.out.println(i);
			i++;
		}
	}
	public static void main(String[] args) {
		numbering(5);	
	}

}

매개변수 limit를 호출하여 numbering의 정의부에 있는 로직들에게 5라는 값을 전달합니다.

결과:
0
1
2
3
4

return

return은 돌려준다는 뜻으로, 메소드가 입력값을 받아 동작해서 그 결과를 메소드 밖으로(메소드를 호출한 쪽으로) 돌려준다는 의미가 있습니다.

반환값이 있는 메소드

public class MethodDemo6 {
	public static String numbering(int init,int limit) {
	int i=init;
	String output="";
	//만들어지는 숫자를 output이라는 변수에 담기위해 변수에 빈값을 주었다.
	while(i<limit) {
		output+=i;  //output=output+i
		i++;
	}
	//public static옆에 string 정수로 반환한다는 것 확인
	return output;
		
	}
	public static void main(String[] args) {
	//numbering의 return자료형이 string이므로 result도 string형으로 설정
	String result=numbering(1,5);
	//result변수값을 화면에 출력한다.
	System.out.println(result);
	}

}

결과 :
1234

입력값이 없는 메소드

say뒤에 입력값 없이 리턴값으로 문자열 "Hello"를 출력할 수 있다.

class Test{

	public String say() {
		//say()메소드의 입력값 없이 리턴값 출력할 수 있음
		return "Hello";
	}	
}

public class NoInputMethod {

	public static void main(String[] args) {
		Test myTest=new Test();
		//위의 메소드를 쓰기 위해서는 say()괄호안에 아무것도 넣으면 안된다.
		String a=myTest.say();
		System.out.println(a);
	}

}

반환값 없는 메소드

리턴값 없이 입력값(int i,int j) 출력

class Test{

	public void sum(int i, int j) {
		System.out.println(i+j);
	}	
}
	
public class noReturn {

	public static void main(String[] args) {
		Test myTest=new Test();
		//위의 메소드를 쓰기 위해서는 say()괄호안에 아무것도 넣으면 안된다.
		myTest.sum(3,4);
	}

}

public static void main(String[] args)에서 void의 의미

void란 사전적으로 빈공간, 공허감,법적효력이 없는 이라는 뜻을 가지고 있습니다. 메소드앞에 void가 붙으면 이 메소드는 return값이 없다라는 것을 선언한 것입니다.

2개의 댓글

comment-user-thumbnail
2021년 3월 31일

1) 함수 정의부분은 class부터 시작하지 않습니다.

2) return은 메소드(함수) 입력이 없어도 임의값 출력 가능.

int testmthd(void)
{
	return 10;
}

3) 함수는 총 네가지 형태를 가집니다.

void mthd1 (void)   // 입력X,출력X
void mthd2 (int a)   //입력O,출력X
int mthd3 (void)   //입력X,출력O
int mthd4 (int a)   //입력O,출력O]
1개의 답글