public static int add(int a, int b) {
System.out.println(a + "+" + b + " 연산 수행");
int sum = a + b;
return sum;
}
메서드는 크게 메서드 선언과 메서드 본문으로 나눌 수 있다.
1.1. 메서드 선언
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)
1.2. 메서드 본문
{
System.out.println(a + "+" + b + " 연산 수행");
int sum = a + b;
return sum;
}
· 메서드가 수행해야 하는 코드 블럭
· 메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모른다.
2.메서드 호출과 용어 정리
호출 : call("Hello", 20);
메서드 정의 : int call(String str, int age)
· 인수(Argument)
- "Hello", 20 처럼 넘기는 값을 인수 또는 인자, 영어로 Argument라고 한다.
· 매개변수(Parameter)
- 메서드를 정의할 때 선언한 변수인 String str, int age를 매개변수, 영어로 Parameter라고 한다.
- 메서드를 호출할 때 인수/인자/Argument를 넘기면 매개변수에 대입된다.
3.메서드 호출과 값 복사
3.1. 메서드 매개변수와 호출자의 변수 이름이 같은 경우
자바는 항상 값을 복사해서 전달하기 때문에 main()에 정의한 number 변수와 changeNumber() 메서드 안의 number 변수는 서로 완전히 분리된 다른 변수이다. 따라서 메서드 안에서 number의 값을 바꾸더라도 실제 number 변수의 값에 영향을 주지 않는다.
package method;
public class MethodValue1 {
public static void main(String[] args) {
int number = 5;
System.out.println("1. changeNumber 호출 전, number: " + number);
changeNumber(number);
System.out.println("4. changeNumber 호출 후, number: " + number);
}
public static void changeNumber(int number) {
System.out.println("2. changeNumber 변경 전, number: " + number);
number = number * 2;
System.out.println("3. changeNumber 변경 후, number: " + number);
}
}
MethodValue1 메서드 실행 결과
3.2. 메서드 호출과 값 반환받기
메서드를 사용해서 값을 변경하려면 메서드의 호출 결과를 반환 받아서 사용하면 된다. 즉, changeNumber() 메서드의 실행 결과 반환되는 number 값을 main() 메서드의 number 변수에 대입해주면 값을 변경할 수 있다.
package method;
public class MethodValue2 {
public static void main(String[] args) {
int number = 5;
System.out.println("changeNumber 호출 전, number: " + number);
number = changeNumber(number);
System.out.println("changeNumber 호출 후, number: " + number);
}
public static int changeNumber(int number) {
number = number * 2;
return number;
}
}
MethodValue2 메서드 실행결과
3. 메서드 오버로딩(OverLoading)
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
위의 코드에서 볼 수 있듯이 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩(OverLoading)이라 한다. 메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다. 참고로 반환 타입은 인정하지 않는다.
· 오버로딩 실패
메서드 시그니처 = 메서드 이름 + 매개변수 타입(순서)
메서드 시그니처는 자바에서 메서드를 구분할 수 있는 식별자나 서명을 뜻한다. 메서드 시그니처는 메서드의 이름과 매개변수 타입으로 구성되어 있다. 반환 타입은 시그니처에 포함되지 않는다.