✨ 오버로딩 (Overloading)
- 과적하다
- 같은 이름의 메서드를 매개변수만 다르게 여러 개 정의하는 것!
- 같은 클래스 안에서 이름은 같고, 파라미터만 다르게 만든다
- 내용은 다를 수 있음!
- 서로 다른 메서드로 취급됨
🔹 예제
public class Printer {
void print(int num) {
System.out.println("숫자: " + num);
}
void print(String text) {
System.out.println("문자열: " + text);
}
void print(String text, int num) {
System.out.println("문자열: " + text + ", 숫자: " + num);
}
}
public class Main {
public static void main(String[] args) {
Printer p = new Printer();
p.print(10);
p.print("안녕");
p.print("나이", 20);
}
}
🧹 오버라이딩 (Overriding)
- 올라타다, 덮어쓰다
- 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것!
- 메서드 이름, 매개변수, 리턴 타입까지 모두 동일해야 함
- 자식에서 재정의한 메서드가 호출됨 (덮어쓰기)
- 실행 시점에서 어떤 클래스의 메서드를 쓸지 결정됨
🔹 예제
class Animal {
void speak() {
System.out.println("동물이 소리를 냅니다");
}
}
class Dog extends Animal {
@Override
void speak() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal();
a.speak();
Dog d = new Dog();
d.speak();
Animal a2 = new Dog();
a2.speak();
}
}
✅ 요약 비교
| 구분 | 오버로딩 | 오버라이딩 |
|---|
| 의미 | 같은 이름, 다른 매개변수로 여러 개 정의 | 부모 메서드를 자식이 덮어씀 |
| 사용 위치 | 같은 클래스 내 | 상속 관계 (자식 클래스에서) |
| 메서드 이름 | 같음 | 같음 |
| 매개변수 | 달라야 함 | 동일해야 함 |
| 리턴 타입 | 달라도 됨 (Java 5 이하 제한 있음) | 동일해야 함 |
| 실행 시점 | 컴파일 타임 | 런타임 (동적 바인딩) |