자바에서는 함수를 메서드(Method)라 한다.
메서드를 사용하면 앞서 고민한 문제를 한번에 해결할 수 있다.
우선 메서드를 사용해서 코드를 작성해보자.
package method;
public class Method1Ref {
public static void main(String[] args) {
// 계산 1
int sum1 = add(5, 10);
System.out.println("결과1 출력 : " + sum1);
// 계산 2
int sum2 = add(15, 20);
System.out.println("결과2 출력 : " + sum2);
}
// add 메서드
public static int add(int a, int b) {
System.out.println(a + " + " + b + " 연산 수행");
int sum = a + b;
return sum;
}
}
중복이 제거되고, 코드가 상당히 깔끔해진 것을 느낄 수 있다.
public static int add(int a, int b) {
System.out.println(a + " + " + b + " 연산 수행");
int sum = a + b;
return sum;
}
이 부분이 바로 메서드이다. 이것을 함수를 정의하는 것과 같이, 메서드를 정의한다고 표현한다.
메서드는 수학의 함수와 유사하게 생겼다. 함수에 값을 입력하면, 어떤 연산을 처리한 다음에 결과를 반환한다.
메서드는 크게 메서드 선언과 메서드 본문으로 나눌 수 있다.
public static int add(int a, int b)
메서드의 선언 부분으로, 메서드 이름, 반환 타입, 매개변수(파라미터) 목록을 포함한다.
이름 그대로 이런 메서드가 있다고 선언하는 것이다. 메서드 선언 정보를 통해 다른 곳에서 해당 메서드를 호출할 수 있다.
public static
public
: 다른 클래스에서 호출할 수 있는 메서드라는 뜻이다.static
: 객체를 생성하지 않고 호출할 수 있는 정적 메서드라는 뜻이다.int add(int a, int b)
int
: 반환 타입을 정의한다. 메서드의 실행 결과를 반환할 때 사용할 반환 타입을 지정한다.add
: 메서드에 이름을 부여한다. 이 이름으로 메서드를 호출할 수 있다.(int a, int b)
: 메서드를 호출할 때 전달하는 입력 값을 정의한다. 이 변수들은 해당 메서드 안에서만 사용된다. 이렇게 메서드 선언에 사용되는 변수를 영어로 파라미터(parameter), 한글로 매개변수라 한다.{
System.out.println(a + " + " + b + " 연산 수행");
int sum = a + b;
return sum;
}
return
문을 사용해야 한다. return
문 다음에 반환할 결과를 적어 주면 된다.return sum
: sum
변수에 들어있는 값을 반환한다.앞서 정의한 메서드를 호출해서 실행하려면 메서드 이름에 입력 값을 전달하면 된다. 보통 메서드를 호출한다고 표현한다.
int sum1 = add(5, 10);
int sum2 = add(15, 20);
int sum1 = add(5, 10); // add라는 메서드를 숫자 5, 10을 전달하면서 호출한다.
int sum1 = 15; // add(5, 10)이 실행된다. 실행 결과, 15를 반환한다.
// sum1에 15가 저장된다.
메서드를 호출하면 메서드는 계산을 끝내고 결과를 반환한다. 쉽게 이야기하자면, 메서드 호출이 끝나면 해당 메서드가 반환한 결과 값으로 치환된다.
조금 더 자세히 알아보자.
// 1. 메서드 호출
int sum1 = add(5, 10);
// 2. 파라미터 변수 a = 5, b = 10이 전달되면서 메서드가 수행된다.
public static int add(int a = 5, int b = 10) {
int sum = a + b;
return sum;
}
// 3. 메서드가 수행된다.
public static int add(int a = 5, int b = 10) {
int sum = a(5) + b(10);
return sum;
}
// 4. return을 사용해서 메서드 실행의 결과인 sum을 반환한다. sum에는 값 15가 들어있으므로 값 15가 반환된다.
public static int add(int a = 5, int b = 10) {
int sum = 15;
return sum(15);
}
// 5. 메서드 호출 결과로 메서드에서 반환한 값 15가 나온다. 이 값을 sum1에 대입했다.
int sum1 = 15;
메서드 호출이 끝나면 더 이상 해당 메서드가 사용한 메모리를 낭비할 이유가 없다. 메서드 호출이 끝나면 메서드 정의에 사용한 파라미터 변수인 int a
, int b
는 물론이고, 그 안에서 정의한 int sum
도 모두 제거된다.
메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다. 물론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야 한다.
호출 : call("hello", 20)
메서드 정의 : int call(String str, int age)
여기서 “hello”
, 20
처럼 넘기는 값을 영어로 Argument(아규먼트), 한글로 인수 또는 인자라 한다.
실무에서는 아규먼트, 인수, 인자라는 용어를 모두 사용한다.
메서드를 정의할 때 선언한 변수인 String str
, int age
를 매개변수, 파라미터라 한다.
메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.
실무에서는 매개변수, 파라미터 용어를 모두 사용한다.
💡 단축키
- Navigate → Go to Declaration or Usages :
command
+B