메서드

  • 타언어에서 함수와 동일한 기능
  • 수학의 함수와 비슷하며 호출을 통해 사용
  • 호출 시 전달 값이 있을 수도, 없을 수도 있음
  • 카멜 표기법을 사용 > 변수가 아님

[접근제어지시자] 반환형 메소드명 (매개변수) { 실행부 }

메소드의 접근제어지시자

access modifier같은 패키지같은 클래스자손 클래스전체
publicoooo
protectedooo
defaultoo
privateoo
  • public : 접근 제한이 없다
  • protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능 (자손은 보호해야 하니까 자손 클래스 포함)
  • default : 기본으로 생략가능, 같은 패키지 내에서만 접근 가능
  • private : 같은 클래스 내에서만 접근 가능
  • 접근 범위 : private < default < protected < public

package가 다른 경우, import해야 다른 package의 method를 사용할 수 있다

메서드 반환형

메서드 반환형
void반환값이 없는 경우
기본자료형8가지의 기본 자료형
참조자료형String, 사용자 정의
(배열)참조형

매개변수 parameter

  • () : 매개변수가 없는 것을 의미한다
  • 기본자료형 : 기본형 매개변수 사용 시 값을 복사하여 전달 call by value
  • 참조자료형, 배열 : 참조자료형, 배열을 매개변수로 전달 시에는 데이터로 주소값을 전달 call by reference
  • 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;
	}

method overloading

과적하다 =메서드 매개변수 다중정의
한 클래스 내에서 매개변수 선언부가 다르고, 이름이 같은 메서드를 여러개 정의하는 것

성립조건

  1. 메서드 이름이 같아야 한다
  2. 매개변수 선언부가 달라야 한다
    • 매개변수 타입, 개수, 순서

주의사항

  1. 매개변수에서 사용하는 변수 이름은 메서드 내에서만 사용하므로 오버로딩 된 곳에서 동일하게 사용할 수 있다
  2. 리턴타입은 오버로딩에 영향을 주지 않는다
    • 같거나 다르거나 무관하다
public int add (int a, String b) {
	//실행부 생략	
}	
public int add2 (String a, int b) {
	//실행부 생략}	
}

//컴퓨터가 찾아갈 수 있으므로 가능하다

오버로딩은 결국 동일한 메소드명을 가진 메소드들의 매개변수가 어떠한 데이터 타입인지, 어떠한 순서로 있는지만 중요하며, 매개변수의 내용이 다르면 가능하다

profile
aelatte coding journal

0개의 댓글

Powered by GraphCDN, the GraphQL CDN