Java Study
TIL - 오버로딩 vs 오버라이딩
초코너무조코
2024. 12. 23. 17:37
728x90
오버로딩(Overloading)
오버로딩은 같은 이름의 메서드를 매개변수의 개수나 타입을 다르게 정의하여 사용하는 것을 말한다. 주로 컴파일 시점에 결정되며, 같은 클래스 내에서 메서드의 다양성을 제공한다는 장점이 있다.
(Java)
class Calculator {
// 두 개의 정수를 더하는 메서드
int add(int a, int b) {
return a + b;
}
// 세 개의 정수를 더하는 메서드
int add(int a, int b, int c) {
return a + b + c;
}
// 두 개의 실수를 더하는 메서드
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(3, 5)); // 출력: 8
System.out.println(calc.add(1, 2, 3)); // 출력: 6
System.out.println(calc.add(1.2, 3.4)); // 출력: 4.6
}
}
특징
- 메서드 이름은 같지만 매개변수의 개수나 타입이 다르다.
- 반환 타입은 오버로딩을 구분하는 데 영향을 미치지 않는다.
오버라이딩(Overriding)
오버라이딩은 상위 클래스의 메서드를 하위 클래스에서 재정의하여 사용하는 것을 의미한다. 주로 런타임 시점에 결정되며, 다형성을 제공한다.
class Animal {
// 상위 클래스 메서드
void sound() {
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
// 오버라이딩된 메서드
@Override
void sound() {
System.out.println("멍멍!");
}
}
class Cat extends Animal {
// 오버라이딩된 메서드
@Override
void sound() {
System.out.println("야옹!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound(); // 출력: 멍멍!
myCat.sound(); // 출력: 야옹!
}
}
특징
- 상위 클래스의 메서드를 같은 이름, 같은 매개변수로 재정의한다.
- @Override 어노테이션을 사용하여 오버라이딩 여부를 명시적으로 표현할 수 있다.
- 메서드의 접근 제어자는 상위 클래스보다 더 제한적일 수 없다.
비교
오버로딩(Overloading) 오버라이딩(Overriding)
정의 | 같은 이름의 메서드를 매개변수 형태를 다르게 정의 | 상위 클래스의 메서드를 하위 클래스에서 재정의 |
시점 | 컴파일 타임 | 런타임 |
적용 범위 | 같은 클래스 내에서 적용 | 상속 관계에서 적용 |
다형성 | 제공하지 않음 | 제공함 |
728x90