0629 java method

onnbi·2022년 7월 26일
0

java-tutorial

목록 보기
5/13
post-thumbnail

메서드

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

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

메소드의 접근제어지시자

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개의 댓글