재귀 (Recursive) 메소드
재귀 메소드는 메소드가 자기 자신을 호출하는 것이다.
public class Recursive {
public static void max(int value) {
if (value < 0) {
return;
} else {
System.out.println(value);
max(value - 1);
}
}
public static void main(String[] args) {
max(10);
}
}
위 코드처럼 max 함수는 자기 자신을 또 호출하여 10부터 0까지 출력하는 반복문 효과가 발생한다.
이 때, 주의해야 할 것은 추가 호출 없이 return 하는 종료 조건도 있어야 한다는 것이다.
재귀 메소드는 팩토리얼, 피보나치, 하노이의 탑 문제를 해결할 때 활용할 수 있다.
하지만, 재귀 메소드는 다음 (자기 자신) 함수를 호출할 때마다 새로운 스택 영역 메모리를 또 할당 받기 때문에 자원 소모가 크다.
메소드 오버로딩
하나의 클래스 내에서는 같은 이름의 메소드가 있어서는 안 되지만, 같은 이름이긴 하나 파라미터의 개수와 타입이 다르고 이에 따라 선택적으로 호출할 수 있는 메소드를 사용하는 것이 메소드 오버로딩이다.
- 하나의 클래스 내에서 같은 이름을 사용하는 메소드
- 파라미터 개수와 타입으로 메소드 간 구분
- 다형성의 특징 중 하나
public class OverLoading {
static int sum(int a, int b) {
return a + b;
}
static double sum(double a, double b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(sum(3, 5)); // sum(int a, int b) 호출 -> return 8
System.out.println(sum(2.8, 3.6)); // sum(double a, double b) 호출 -> return 6.4
}
}
위 코드처럼 sum 이라는 이름의 메소드는 2개이지만 하나는 정수를 인자로 받아 정수의 합을, 다른 하나는 소수를 인자로 받아 소수의 합을 구하는 메소드이다.
Java 컴파일러는 sum 메소드를 호출할 때, 파라미터 개수 및 타입을 통해 구분하여 호출한다.
메소드 시그니처
메소드 시그니처는 하나의 클래스 안에서 컴파일러가 메소드를 구분하게 해주는 것이다.
(메소드 시그니처 구성) 메소드의 이름으로도 구분이 가능하며, 메소드 오버로딩에서처럼 파라미터의 개수와 타입으로도 구분이 가능하다.
주의할 것은 메소드의 반환 타입은 포함하지 않기 때문에 메소드 이름, 파라미터 개수, 타입이 동일하면 컴파일 에러가 발생한다.
'Java' 카테고리의 다른 글
[Java] 상속 Inheritance (0) | 2024.02.26 |
---|---|
[Java] 메소드와 파라미터 (1) (0) | 2024.02.22 |
[Java] 문과 표현식 (3) (0) | 2024.02.20 |
[Java] 문과 표현식 (2) (2) | 2024.02.20 |
[Java] 문과 표현식 (1) (0) | 2024.02.20 |