- 타언어에서 함수와 동일한 기능
- 수학의 함수와 비슷하며 호출을 통해 사용
- 호출 시 전달 값이 있을 수도, 없을 수도 있음
- 카멜 표기법을 사용 > 변수가 아님
[접근제어지시자] 반환형 메소드명 (매개변수) { 실행부 }
access modifier | 같은 패키지 | 같은 클래스 | 자손 클래스 | 전체 |
---|---|---|---|---|
public | o | o | o | o |
protected | o | o | o | |
default | o | o | ||
private | o | o |
private
< default
< protected
< public
package가 다른 경우, import해야 다른 package의 method를 사용할 수 있다
메서드 반환형 | |
---|---|
void | 반환값이 없는 경우 |
기본자료형 | 8가지의 기본 자료형 |
참조자료형 | String, 사용자 정의 |
(배열) | 참조형 |
public void test5() {
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 정수 입력 : ");
int num1 = sc.nextInt();
System.out.print("두번째 정수 입력 : ");
int num2 = sc.nextInt();
// 입력받은 두 수의 합을 출력 > 메서드로 분리
// 메서드를 호출하고 결과를 받아 sum에 저장
int sum = add(num1, num2);
// 입력받은 두 수의 나누기 결과를 받아오는 메서드 생성
// 나누기 결과는 실수타입, 메서드 명은 div
double div = div(num1, num2);
System.out.println("입력받은 두 수의 합은 ? "+sum);
System.out.println("입력받은 두 수를 나누면 ? "+div);
}
public double div(int a, int b) {
double result = (double)a/b;
return result;
}
public void div2(int a, int b) {
double result = (double)a/b;
System.out.println(result);
// 출력하고 끝남 > result를 재사용하기 힘들다
// 따라서 위 방식으로 많이 씀
}
public int add (int su1, int su2) {
// 접근제어자 반환타입 메서드명 (매개변수1, 매개변수2)
System.out.println(su1);
System.out.println(su2);
// su1, su2에 들어오는 수를 확인하기 위해
int sum = su1+su2;
return sum;
}
매개변수명은 메서드 내에서만 사용된다
매서드 밖 변수명과 겹쳐도 해당 변수와 관계 없다
public void test6() {
// 1. 기본형 매개변수
int num = 100;
System.out.println("num : "+num);
test7(num);
// 매개변수로 기본형 데이터 전송할 때는
// 값을 복사하여 보낸다
System.out.println("test7 후 num : "+num);
// 100 < 영향을 받지 않음
// 2. 참조형 매개변수
int[] arr = {1,2,3,4,5};
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
} // 참조형 매개변수를 만들기 위한 배열 생성
System.out.println();
// 참조형 데이터를 매개변수로 전달하면
// 주소값이 전달 > 얕은 복사
test8(arr); // arr[2] = 100; 메서드 호출
System.out.println();
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
//3. 배열의 값을 넘겨주는 것 = 기본형
System.out.println(arr[2]);
test9(arr[2]);
System.out.println(arr[2]);
}
}
//1. 기본형 매개변수 메서드
public void test7(int num) {
num += 100;
System.out.println("test7 : "+num);
}
//2. 참조형 매개변수 메서드
public void test8(int[] arr) {
arr[2] = 100;
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
//3. 배열의 값 = 기본형을 받는 메서드
public void test9(int num) {
num += 300;
}
과적하다 =메서드 매개변수 다중정의
한 클래스 내에서 매개변수 선언부가 다르고, 이름이 같은 메서드를 여러개 정의하는 것
public int add (int a, String b) {
//실행부 생략
}
public int add2 (String a, int b) {
//실행부 생략}
}
//컴퓨터가 찾아갈 수 있으므로 가능하다
오버로딩은 결국 동일한 메소드명을 가진 메소드들의 매개변수가 어떠한 데이터 타입인지, 어떠한 순서로 있는지만 중요하며, 매개변수의 내용이 다르면 가능하다