| 구분 | Override | Overload |
|---|---|---|
| 의미 | 부모 클래스의 메서드를 재정의 | 같은 이름의 메서드를 다른 매개변수로 정의 |
| 매개변수 | 부모 메서드와 동일해야 함 | 매개변수가 다르게 정의됨 |
| 반환 타입 | 부모 메서드와 동일해야 함 | 반환 타입이 달라도 무방 |
| 접근 제한자 | 부모보다 넓거나 같아야 함 | 제한 없음 |
| 사용 목적 | 다형성 구현 | 메서드 이름의 일관성 유지, 코드 가독성 향상 |
class Animal {
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("개가 멍멍 소리를 냅니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 다형성
animal.sound(); // 출력: 개가 멍멍 소리를 냅니다.
}
}
@Override 어노테이션은 재정의된 메서드임을 명시 class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(1, 2)); // 출력: 3
System.out.println(calc.add(1.5, 2.5)); // 출력: 4.0
System.out.println(calc.add(1, 2, 3)); // 출력: 6
}
}
Override와 Overload는 객체지향 프로그래밍에서 중요한 개념으로 각각 다형성과 코드 재사용성을 극대화하는 데 기여합니다.
Override를 통해 부모 클래스의 동작을 자식 클래스에서 재정의하며 유연한 설계를 경험할 수 있었습니다.
Overload를 사용해 메서드 이름을 일관되게 유지하면서 다양한 입력을 처리하는 편리함을 체감했습니다.
두 개념을 명확히 구분하고 적재적소에 활용하는 것이 유지보수성과 가독성을 높이는 데 중요하다고 느꼈습니다.