메소드 오버로딩은 같은 이름의 메소드를 여러 개 정의하되, 각 메소드가 서로 다른 파라미터 목록을 가지도록 하는 기법입니다. 이는 다형성의 한 형태로, 다양한 입력에 대해 동일한 작업을 수행하기 위해 사용됩니다.
정의
같은 이름의 메소드여도, 파라미터 개수나 타입에 따라 다른 메소드가 실행됩니다. 이를 메소드 오버로딩이라고 합니다. 예를 들어, 다음과 같이 두 개의 add 메소드를 정의할 수 있습니다.
예제 코드
public class MethodOverloading {
static int add(int i, int j) {
return i + j;
}
static int add(int i, int j, int k) {
return i + j + k;
}
public static void main(String[] args) {
int i = add(1, 2);
int j = add(1, 2, 3);
System.out.println(i + j); // 출력: 9
}
}
이처럼 같은 이름의 메소드를 정의하고, 파라미터의 개수나 타입에 따라 적절한 메소드가 실행됩니다. 이는 정적 바인딩(컴파일 시점에 바인딩)으로 처리됩니다.
메소드 시그너처
컴파일러는 메소드 시그너처를 사용하여 클래스의 메소드를 구분합니다. 각 클래스에서 각 메소드의 시그너처는 유일해야 합니다. 메소드 시그너처는 메소드의 이름, 파라미터의 타입, 파라미터의 개수로 구성됩니다.
예제 코드
public class MethodSignature {
static int doSomething(int n) {
return n;
}
// 아래 메소드는 컴파일 오류 발생: 시그너처가 동일함
// static String doSomething(int n) {
// return "Hello";
// }
}
메소드 시그너처는 반환 타입을 포함하지 않습니다. 따라서 위 두 메소드는 같은 시그너처로 판단되어 컴파일 시 오류가 발생합니다.
오버로드 된 메소드 사용
메소드 오버로딩을 통해 다양한 입력에 대해 유연하게 대응하는 메소드를 작성할 수 있습니다. 예를 들어, 다음과 같은 인사말을 출력하는 메소드를 정의할 수 있습니다.
예제 코드
public class Greetings {
enum TimeOfDay {Morning, Afternoon, Evening}
static void greet() {
System.out.println("Hello");
}
static void greet(String name) {
System.out.println("Hello " + name);
}
static void greet(String name, TimeOfDay timeOfDay) {
String message = "";
switch (timeOfDay) {
case Morning:
message = "Good morning, ";
break;
case Afternoon:
message = "Good afternoon, ";
break;
case Evening:
message = "Good evening, ";
break;
}
System.out.println(message + name);
}
public static void main(String[] args) {
greet();
greet("Kitty");
greet("Crab", TimeOfDay.Morning);
}
}
출력 결과
이 예제에서는 greet 메소드를 세 가지 형태로 오버로딩하여, 파라미터의 유무와 타입에 따라 적절한 인사말을 출력합니다. 이는 다양한 상황에 유연하게 대응할 수 있는 코드를 작성하는 데 매우 유용합니다.
디버깅과 유지보수가 어려울 수 있다는 단점이 있지만, 메소드 오버로딩을 통해 코드의 재사용성을 높이고, 코드의 가독성을 향상시킬 수 있습니다.
'🖥️ PC > JAVA' 카테고리의 다른 글
11. 패키지 (0) | 2024.06.26 |
---|---|
9. 파라미터 (0) | 2024.06.26 |
8. 메소드 (0) | 2024.06.26 |
7. 예외처리 Exception (0) | 2024.06.26 |
6. 자바의 기본 데이터 타입 (Primitive Data Types) (0) | 2024.06.26 |