본문 바로가기
Java

[JAVA] 메서드(Method)

by 코코형아 2024. 1. 23.

5. 자바 메서드(Method)

 

메서드(Method)


Variable arguments

  • 메서드 선언 시 동일 타입의 인자가 몇 개 들어올지 예상할 수 없을 경우(또는 가변적)
    • 배열 타입을 선언할 수 있으나 → 메서드 호출 전 배열을 생성, 초기화 해야 하는 번거로움
    • …을 이용하여 파라미터를 선언하면 호출 시 넘겨준 값의 개수에 따라 자동으로 배열 생성 및 초기화
public void addAll(int ... params) {
	int sum = 0;
	for(int i : params) {
		sum += i;
	}
	System.out.println(sum);
}

 

 

메서드 호출

  • 메서드를 호출할 때는 메서드의 선언부에 맞춰 호출해야 함
    • 메서드 이름 : 반드시 동일
    • 파라미터 : 선언된 파라미터의 개수는 반드시 동일, 타입은 promotion 적용 가능
  • 메서드 접근
    • 멤버 변수와 마찬가지로 static 또는 non static 상태를 구분해서 호출

 

메서드 호출 방법 정리

 

  • 기본형 변수와 참조형 변수
    • 메서드 호출 시 파라미터로 입력된 값을 복사해서 전달
    • Java는 Call by Value!!
public class CallByTest {
	int memberVar = 10;
	static void change1(int var) {
		var += 10;
		System.out.printf("change1 : %d%n", var);
	}
	
	static void change2(CallByTest cbtl) {
		cbtl.memberVar += 100;
		System.out.printf("change2 : %d%n", cbtl.memberVar);
	}	

	public static void main(String[] args) {
		CallByTest cbt = new CallByTest();
		cbt.memberVar = 5;
		System.out.printf("change1 호출 전 memberVar : %d%n", cbt.memberVar);
		change1(cbt.memberVar);
		System.out.printf("change1 호출 후 memberVar : %d%n", cbt.memberVar);
		change2(cbt);
		System.out.printf("change2 호출 후 memberVar : %d%n", cbt.memberVar);
	}

}

//실행결과
//change1 호출 전 memberVar : 5
//change1 : 15
//change1 호출 후 memberVar : 5
//change2 : 105
//change2 호출 후 memberVar : 105

 

 

메서드 오버로딩

  • 조건
    • 메서드 이름은 동일 해야 함
    • 파라미터의 개수 또는 데이터 타입이 달라야 함
    • 파라미터가 같으면 중복 선언 오류(순서만 다른것은 파라미터가 같은것!)
💡 매개변수 이름, 리턴 타입은 의미 없음 (아래 예제 모두 메서드 오버로딩이 아니다!)

 

// 매개변수의 타입은 같지만 이름만 다른 경우
int isOverLoading(int a, int b) { return a + b;}
int isOverLoading(int x, int y) { return x + y;}

// 리턴 타입만 다른 경우
int isOverLoading(int x, int y) { return x + y;}
long isOverLoading(int x, int y) { return x + y;}

// 매개변수의 타입이 같은데 순서만 다른 경우
long isOverLoading(long x, int y) { return x + y;}
long isOverLoading(int x, long y) { return x + y;}

 

 

자바 데이터 기본값

멤버 변수(인스턴스 멤버변수 & 클래스 멤버 변수)는 선언시에 타입별로 default 초기화 값을 가진다

  • 정수형 : 0
  • 실수형 : 0.0
  • 논리형 : false
  • 단일문자 : ‘\u0000’ 공백문자
  • 참조형(객체형) : null (String 문자열 위한 객체형)