🍒 오늘은 강의 위주로 진행해서 개념정리로 TIL 마무리!!
메서드 정의
자바에서는 함수를 메서드(Method)라 한다.
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)
메서드의 선언 부분으로, 메서드 이름, 반환 타입, 매개변수(파라미터) 목록을 포함
메서드 선언 정보를 통해 다른 곳에서 해당 메서드를 호출할 수 있다.
int add(int a, int b) : 메서드를 호출할 때 전달하는 입력 값을 정의 메서드 선언에 사용되는 변수를 영어로 파라미터, 한글로 매개변수라 한다.
메서드 본문(Method Body)
{
System.out.println(a + "+" + b + " 연산 수행");
int sum = a + b;
return sum;
}
메서드가 수행해야 하는 코드 블록
메서드를 호출하는 곳에서는 메서드 선언은 알지만 메서드 본문은 모른다.
메서드 실행 결과를 반환하려면 return을 사용해야 한다.
메서드 호출 / 용어정리
int sum1 = add(5, 10);
int sum2 = add(15, 20);
메서드를 호출할 때는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야 한다.
물론 넘기는 값과 매개변수(파라미터)의 순서와 갯수도 맞아야 한다.
인수 : 넘기는 값을 말함 = 메서드 내부로 들어가는 값을 의미, 영어로 Argument
매개변수 : 중간에서 전달하는 변수 = 메서드 호출부와 내부 사이에서 값을 전달하는 역할을 하는 변수
메서드를 호출할 때 인수를 넘기면, 그 인수가 매개변수에 대입된다.
return을 호출해야 한다. 자바가 반환 타입이 없는 경우에는 return을 마지막줄에 넣어준다.메서드 호출과 값 전달1
자바는 항상 변수의 값을 복사해서 대입한다.
package method;
public class MethodValue1 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("1. changeNumber 호출 전, num1: " + num1);
changeNumber(num1);
System.out.println("4. changeNumber 호출 후, num1: " + num1);
}
public static void changeNumber(int num2) {
System.out.println("2. changeNumber 변경 전, num2: " + num2);
num2 = num2 * 2;
System.out.println("3. changeNumber 변경 후, num2: " + num2);
}
}
결과
1. changeNumber 호출 전, num1: 5
2. changeNumber 변경 전, num2: 5
3. changeNumber 변경 후, num2: 10
4. changeNumber 호출 후, num1: 5
간단하게 num1 에 있는 값을 num2 에 대입한다고 표현한다. 하지만 실제로는 그 값을 복사해서 대입하는 것이다.
결과적으로 매개변수 num2 의 값만 10으로 변경되고 num1 의 값은 변경되지 않고 기존 값인 5로 유지된다.
자바는 항상 값을 복사해서 전달하기 때문에 num2 의 값을 바꾸더라도 num1 에는 영향을 주지 않는다.
메소드가 다르면 변수 이름이 같아도 아예 다른 독립된 변수임
메서드 호출과 값 반환받기
package method;
public class MethodValue3 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("changeNumber 호출 전, num1: " + num1); // 출력: 5
num1 = changeNumber(num1);
System.out.println("changeNumber 호출 후, num1: " + num1); // 출력: 10
}
public static int changeNumber(int num2) {
num2 = num2 * 2;
return num2;
}
}
값을 반환받으려면 return 넣어주기
꼭 기억하자! 자바는 항상 변수의 값을 복사해서 대입한다
메서드 오버로딩
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩이라 한다.
같은 이름의 메서드를 여러개 정의했다고 이해하기
규칙
메서드의 이름이 같아도 매개변수의 타입 및 순서가 다르면 오버로딩을 할 수 있다.( 반환 타입은 인정하지 않는다.)
오버로딩 실패!!
int add(int a, int b)
double add(int a, int b)
매개변수 갯수가 다른경우
package overloading;
public class Overloading1 {
public static void main(String[] args) {
System.out.println("1: " + add(1, 2));
System.out.println("2: " + add(1, 2, 3));
}
// 첫 번째 add 메서드: 두 정수를 받아서 합을 반환한다.
public static int add(int a, int b) {
System.out.println("1번 호출");
return a + b;
}
// 두 번째 add 메서드: 세 정수를 받아서 합을 반환한다.
// 첫 번째 메서드와 이름은 같지만, 매개변수 목록이 다르다.
public static int add(int a, int b, int c) {
System.out.println("2번 호출");
return a + b + c;
}
결과
1번 호출
1: 3
2번 호출
2: 6
매개변수 타입이 다른경우
package overloading;
public class Overloading2 {
public static void main(String[] args) {
myMethod(1, 1.2);
myMethod(1.2, 2);
}
public static void myMethod(int a, double b) {
System.out.println("int a, double b");
}
public static void myMethod(double a, int b) {
System.out.println("double a, int b");
}
}
결과
int a, double b
double a, int b